Re: [PATCH] sequencer.c: fix detection of duplicate s-o-b

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This seems to have been lost, perhaps because the top part that was
quite long didn't look like a patch submission message or something.

Git 1.7.12 is a quite ancient release and I wouldn't be surprised if
we made the behaviour change during the period leading to v2.6 on
purpose, but nothing immediately comes to mind.  Christian (as the
advocate for the trailer machinery) and Brandon ("git shortlog
sequencer.c" suggests you), can you take a look?

Willy Tarreau <w@xxxxxx> writes:

> Hi,
>
> after I upgraded my machine, I switched from git 1.7.12.2 to 2.6.4
> and experienced an annoying regression when dealing with stable
> kernel backports.
>
> I'm using a "dorelease" script which relies on git-cherry-pick's
> ability to properly detect duplicate s-o-b to ensure that all merged
> commits are properly signed in a release. Today while preparing the
> last 2.6.32 release, I did a git log before pushing and found some
> commits having two s-o-b lines with myself. I found that these ones
> were always those containing some backporting notes between the s-o-b
> lines (which we all do in stable branches to indicate what was changed
> in the backport process).
>
> I didn't feel brave enough to individually deal with each offending
> patch by hand so instead I bisected the git changes and found that the
> behaviour changed with commit bab4d10 ("sequencer.c: teach append_signoff
> how to detect duplicate s-o-b").
>
> The reason is that function has_conforming_footer() immediately stops
> after the first non-conforming line without checking if there are
> conforming lines after. But if someone added signed-off-by anywhere
> after a non-conforming block, it should always be considered as part
> of the footer. Thus I adjusted the logic to check till the end of the
> footer and report the presence of valid rfc2822 or cherry-picked lines
> after the last non-conformant one and now it correctly handles all types
> of commits I had to deal with (ie: only adds s-o-b when it doesn't match
> the last one and doesn't add an empty line after a conformant one). For
> example, this footer :
>
>     Signed-off-by: Mike Galbraith <umgwanakikbuti@xxxxxxxxx>
>     [bwh: Backported to 3.2:
>      - Adjust numbering in the comment
>      - Adjust filename]
>     Signed-off-by: Ben Hutchings <ben@xxxxxxxxxxxxxxx>
>     Cc: Byungchul Park <byungchul.park@xxxxxxx>
>     Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
>     Cc: Willy Tarreau <w@xxxxxx>
>
> Used to be turned into this :
>
>     Signed-off-by: Mike Galbraith <umgwanakikbuti@xxxxxxxxx>
>     [bwh: Backported to 3.2:
>      - Adjust numbering in the comment
>      - Adjust filename]
>     Signed-off-by: Ben Hutchings <ben@xxxxxxxxxxxxxxx>
>     Cc: Byungchul Park <byungchul.park@xxxxxxx>
>     Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
>     Cc: Willy Tarreau <w@xxxxxx>
>
>     Signed-off-by: Willy Tarreau <w@xxxxxx>
>
> And is now properly converted to :
>
>     Signed-off-by: Mike Galbraith <umgwanakikbuti@xxxxxxxxx>
>     [bwh: Backported to 3.2:
>      - Adjust numbering in the comment
>      - Adjust filename]
>     Signed-off-by: Ben Hutchings <ben@xxxxxxxxxxxxxxx>
>     Cc: Byungchul Park <byungchul.park@xxxxxxx>
>     Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
>     Cc: Willy Tarreau <w@xxxxxx>
>     Signed-off-by: Willy Tarreau <w@xxxxxx>
>
> Also, cherry-picking the last commit above again would produce this
> before :
>
>     Signed-off-by: Mike Galbraith <umgwanakikbuti@xxxxxxxxx>
>     [bwh: Backported to 3.2:
>      - Adjust numbering in the comment
>      - Adjust filename]
>     Signed-off-by: Ben Hutchings <ben@xxxxxxxxxxxxxxx>
>     Cc: Byungchul Park <byungchul.park@xxxxxxx>
>     Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
>     Cc: Willy Tarreau <w@xxxxxx>
>     Signed-off-by: Willy Tarreau <w@xxxxxx>
>
>     Signed-off-by: Willy Tarreau <w@xxxxxx>
>
> And it now is properly left untouched since the last s-o-b line
> is properly matched.
>
> I'm appending the patch, please include it upstream.
>
> Thanks!
> Willy
>
>
> From be9624a0df4c649d452f898925953a81dc9163fc Mon Sep 17 00:00:00 2001
> From: Willy Tarreau <w@xxxxxx>
> Date: Sat, 12 Mar 2016 13:35:35 +0100
> Subject: sequencer.c: fix detection of duplicate s-o-b
>
> Commit bab4d10 ("sequencer.c: teach append_signoff how to detect
> duplicate s-o-b") changed the method used to detect duplicate s-o-b,
> but it introduced a regression for a case where some non-compliant
> information are present in the footer. In maintenance branches, it's
> very common to add some elements after the signed-off and to add your
> s-o-b after. This is used a lot in the stable kernel series, for
> example this commit backported from 3.2 to 2.6.32 :
>
>     ALSA: usb-audio: avoid freeing umidi object twice
>
>     commit 07d86ca93db7e5cdf4743564d98292042ec21af7 upstream.
>
>     The 'umidi' object will be free'd on the error path by snd_usbmidi_free()
>     when tearing down the rawmidi interface. So we shouldn't try to free it
>     in snd_usbmidi_create() after having registered the rawmidi interface.
>
>     Found by KASAN.
>
>     Signed-off-by: Andrey Konovalov <andreyknvl@xxxxxxxxx>
>     Acked-by: Clemens Ladisch <clemens@xxxxxxxxxx>
>     Signed-off-by: Takashi Iwai <tiwai@xxxxxxx>
>     Signed-off-by: Ben Hutchings <ben@xxxxxxxxxxxxxxx>
>     [wt: file is sound/midi/usbmidi.c in 2.6.32]
>     Signed-off-by: Willy Tarreau <w@xxxxxx>
>
> Prior to the commit above, a cherry-pick -s would not append an extra s-o-b.
> After this commit, a new line and a second s-o-b are added, making the footer
> look like this :
>
>     Signed-off-by: Andrey Konovalov <andreyknvl@xxxxxxxxx>
>     Acked-by: Clemens Ladisch <clemens@xxxxxxxxxx>
>     Signed-off-by: Takashi Iwai <tiwai@xxxxxxx>
>     Signed-off-by: Ben Hutchings <ben@xxxxxxxxxxxxxxx>
>     [wt: file is sound/midi/usbmidi.c in 2.6.32]
>     Signed-off-by: Willy Tarreau <w@xxxxxx>
>
>     Signed-off-by: Willy Tarreau <w@xxxxxx>
>
> This patch improves the parsing of the footer by considering the
> presence of a valid rfc2822 line after possibly non-conformant lines.
> Indeed, if someone added an s-o-b or CC after some stuff, this line
> must properly be considered as part of the footer and not of the body.
>
> Signed-off-by: Willy Tarreau <w@xxxxxx>
> ---
>  sequencer.c | 15 ++++++++++-----
>  1 file changed, 10 insertions(+), 5 deletions(-)
>
> diff --git a/sequencer.c b/sequencer.c
> index e66f2fe..ab2c18d 100644
> --- a/sequencer.c
> +++ b/sequencer.c
> @@ -64,6 +64,8 @@ static int has_conforming_footer(struct strbuf *sb, struct strbuf *sob,
>  	int len = sb->len - ignore_footer;
>  	const char *buf = sb->buf;
>  	int found_sob = 0;
> +	int found_valid = 0;
> +	int found_other = 0;
>  
>  	/* footer must end with newline */
>  	if (!len || buf[len - 1] != '\n')
> @@ -96,15 +98,18 @@ static int has_conforming_footer(struct strbuf *sb, struct strbuf *sob,
>  		if (found_rfc2822 && sob &&
>  		    !strncmp(buf + i, sob->buf, sob->len))
>  			found_sob = k;
> -
> -		if (!(found_rfc2822 ||
> -		      is_cherry_picked_from_line(buf + i, k - i - 1)))
> -			return 0;
> +		else if (found_rfc2822 ||
> +			 is_cherry_picked_from_line(buf + i, k - i - 1))
> +			found_valid = k;
> +		else
> +			found_other = k;
>  	}
>  	if (found_sob == i)
>  		return 3;
> -	if (found_sob)
> +	if (found_sob > found_other)
>  		return 2;
> +	if (found_other > found_valid)
> +		return 0;
>  	return 1;
>  }
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]