# [PATCH] git-quiltimport: better parser to grok "enhanced" series files.

5 messages from 2008-03-08 to 2008-03-09. Participants: Pierre Habouzit, Junio C Hamano.
Thread: https://gitlist.dev/t/12577

## Pierre Habouzit, 2008-03-08 18:27

Subject: [PATCH] git-quiltimport: better parser to grok "enhanced" series files.
Message-ID: <20080308182709.GA3109@artemis.madism.org>
URL: https://gitlist.dev/e/20080308182709.GA3109%40artemis.madism.org

```
The previous parser wasn't able to grok:
* empty lines;
* annotated patch levels (trailing -pNNN annotations);
* trailing comments.

Now it even uses the patch level hints as a git apply argument.

Signed-off-by: Pierre Habouzit <madcoder@debian.org>
---

  I'd even argue that it's maint material btw :)

 git-quiltimport.sh |   19 +++++++++++++++++--
 1 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/git-quiltimport.sh b/git-quiltimport.sh
index 233e5ea..0d8a765 100755
--- a/git-quiltimport.sh
+++ b/git-quiltimport.sh
@@ -63,7 +63,22 @@ tmp_info="$tmp_dir/info"
 commit=$(git rev-parse HEAD)
 
 mkdir $tmp_dir || exit 2
-for patch_name in $(grep -v '^#' < "$QUILT_PATCHES/series" ); do
+cat "$QUILT_PATCHES/series" | while read patch_name level garbage; do
+	case "$patch_name" in ''|'#'*) continue;; esac
+	case "$level" in
+		-p*);;
+		''|'#'*)
+			level=;;
+		*)
+			echo "unable to parse patch level, ignoring it."
+			level=;;
+	esac
+	case "$garbage" in
+		''|'#'*);;
+		*)
+			echo "trailing garbage found: $garbage, please fix your series file"
+			exit 1;;
+	esac
 	if ! [ -f "$QUILT_PATCHES/$patch_name" ] ; then
 		echo "$patch_name doesn't exist. Skipping."
 		continue
@@ -113,7 +128,7 @@ for patch_name in $(grep -v '^#' < "$QUILT_PATCHES/series" ); do
 	fi
 
 	if [ -z "$dry_run" ] ; then
-		git apply --index -C1 "$tmp_patch" &&
+		git apply --index -C1 $level "$tmp_patch" &&
 		tree=$(git write-tree) &&
 		commit=$( (echo "$SUBJECT"; echo; cat "$tmp_msg") | git commit-tree $tree -p $commit) &&
 		git update-ref -m "quiltimport: $patch_name" HEAD $commit || exit 4
-- 
1.5.4.3.593.g07854.dirty


```

## Junio C Hamano, 2008-03-09 03:39

Subject: Re: [PATCH] git-quiltimport: better parser to grok "enhanced" series files.
Message-ID: <7vk5kcsh06.fsf@gitster.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vk5kcsh06.fsf%40gitster.siamese.dyndns.org
In-Reply-To: <20080308182709.GA3109@artemis.madism.org>

```
Pierre Habouzit <madcoder@debian.org> writes:

>   I'd even argue that it's maint material btw :)

I don't know.

You made the loop a subshell but I think you can redirect into the while
loop without an extra "cat" process.

Can a patch name contain $IFS whitespace characters?  If so, this patch
would regress them.  Otherwise it looks fine.

```

## Pierre Habouzit, 2008-03-09 09:59

Subject: Re: [PATCH] git-quiltimport: better parser to grok "enhanced" series files.
Message-ID: <20080309095918.GA23924@artemis.madism.org>
URL: https://gitlist.dev/e/20080309095918.GA23924%40artemis.madism.org
In-Reply-To: <7vk5kcsh06.fsf@gitster.siamese.dyndns.org>

```
On Sun, Mar 09, 2008 at 03:39:21AM +0000, Junio C Hamano wrote:
> Pierre Habouzit <madcoder@debian.org> writes:
> 
> >   I'd even argue that it's maint material btw :)
> 
> I don't know.

Well not groking the -pNNN makes it useless for me in its current form, 80% of
the quilt series I use have them (and right now it says: I cannot apply patch
'foo-bar.patch -p1').

> You made the loop a subshell but I think you can redirect into the while
> loop without an extra "cat" process.

Well probably yeah, I could use an exec -- < series or an alike trick
for sure.

> Can a patch name contain $IFS whitespace characters?

  I tested and quilt says that:

$ quilt new a\ b.patch
Patch a is now on top

And when I quilt refresh it, it creates a patch named 'a'.  (and yes, I thought
of this and tested it prior to sending the patch).

> If so, this patch would regress them.  Otherwise it looks fine.

-- 
·O·  Pierre Habouzit
··O                                                madcoder@debian.org
OOO                                                http://www.madism.org

```

## Junio C Hamano, 2008-03-09 10:17

Subject: Re: [PATCH] git-quiltimport: better parser to grok "enhanced" series files.
Message-ID: <7vpru4p5g1.fsf@gitster.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vpru4p5g1.fsf%40gitster.siamese.dyndns.org
In-Reply-To: <20080309095918.GA23924@artemis.madism.org>

```
Pierre Habouzit <madcoder@debian.org> writes:

>> You made the loop a subshell but I think you can redirect into the while
>> loop without an extra "cat" process.
>
> Well probably yeah, I could use an exec -- < series or an alike trick
> for sure.

It seems many people forget that it is perfectly fine to redirect into
while loop itself, like

	while read foo bar
        do
        	do a lot of stuff
	done <input-file

>> Can a patch name contain $IFS whitespace characters?
>
>   I tested and quilt says that:
>
> $ quilt new a\ b.patch
> Patch a is now on top
>
> And when I quilt refresh it, it creates a patch named 'a'.  (and yes, I thought
> of this and tested it prior to sending the patch).
>
>> If so, this patch would regress them.  Otherwise it looks fine.

Ok, somehow in an earlier patch to quiltimport I picked up an incorrect
notion that they could contain a blank, but then that's fine.

Will queue, but I am very well into my merge binge for tonight (and it
hasn't finished even though it is past 3 AM, sheesh), so it will be in the
next round.

```

## Pierre Habouzit, 2008-03-09 11:27

Subject: Re: [PATCH] git-quiltimport: better parser to grok "enhanced" series files.
Message-ID: <20080309112700.GB23924@artemis.madism.org>
URL: https://gitlist.dev/e/20080309112700.GB23924%40artemis.madism.org
In-Reply-To: <7vpru4p5g1.fsf@gitster.siamese.dyndns.org>

```
On Sun, Mar 09, 2008 at 10:17:18AM +0000, Junio C Hamano wrote:
> Pierre Habouzit <madcoder@debian.org> writes:
> 
> >> You made the loop a subshell but I think you can redirect into the while
> >> loop without an extra "cat" process.
> >
> > Well probably yeah, I could use an exec -- < series or an alike trick
> > for sure.
> 
> It seems many people forget that it is perfectly fine to redirect into
> while loop itself, like
> 
> 	while read foo bar
>         do
>         	do a lot of stuff
> 	done <input-file

Oh right, well, I assume you already squashed that on top of my patch :)

> Ok, somehow in an earlier patch to quiltimport I picked up an incorrect
> notion that they could contain a blank, but then that's fine.

  Well, maybe they could, but quilt doesn't get it right.

> Will queue, but I am very well into my merge binge for tonight (and it
> hasn't finished even though it is past 3 AM, sheesh), so it will be in the
> next round.

  That's obviously fine by me, thanks :)
-- 
·O·  Pierre Habouzit
··O                                                madcoder@debian.org
OOO                                                http://www.madism.org

```
