[U-Boot] [PATCH] patman: Check commit_match before stripping leading whitespace

Simon Glass sjg at chromium.org
Wed Oct 1 04:25:32 CEST 2014


Hi Scott,

On 29 September 2014 10:22, Scott Wood <scottwood at freescale.com> wrote:
> On Sun, 2014-09-28 at 12:04 -0600, Simon Glass wrote:
>> Hi Scott,
>>
>> On 25 September 2014 13:30, Scott Wood <scottwood at freescale.com> wrote:
>> > True commit lines start at column zero.  Anything that is indented
>> > is part of the commit message instead.  I noticed this by trying to
>> > run buildman with commit e3a4facdfc07179ebe017a07b8de6224a935a9f3
>> > as master, which contained a reference to a Linux commit inside
>> > the commit message.  ProcessLine saw that as a genuite commit
>> > line, and thus buildman tried to build it, and died with an
>> > exception because that SHA is not present in the U-Boot tree.
>> >
>> > Signed-off-by: Scott Wood <scottwood at freescale.com>
>> > ---
>> >  tools/patman/patchstream.py | 4 +++-
>> >  1 file changed, 3 insertions(+), 1 deletion(-)
>> >
>> > diff --git a/tools/patman/patchstream.py b/tools/patman/patchstream.py
>> > index d630157..68e98b9 100644
>> > --- a/tools/patman/patchstream.py
>> > +++ b/tools/patman/patchstream.py
>> > @@ -139,6 +139,9 @@ class PatchStream:
>> >          # Initially we have no output. Prepare the input line string
>> >          out = []
>> >          line = line.rstrip('\n')
>> > +
>> > +        commit_match = re_commit.match(line) if self.is_log else None
>> > +
>> >          if self.is_log:
>> >              if line[:4] == '    ':
>> >                  line = line[4:]
>> > @@ -146,7 +149,6 @@ class PatchStream:
>> >          # Handle state transition and skipping blank lines
>> >          series_tag_match = re_series_tag.match(line)
>> >          commit_tag_match = re_commit_tag.match(line)
>> > -        commit_match = re_commit.match(line) if self.is_log else None
>> >          cover_cc_match = re_cover_cc.match(line)
>> >          signoff_match = re_signoff.match(line)
>> >          tag_match = None
>> > --
>> > 1.9.1
>> >
>>
>> Thanks for finding this bug.
>>
>> This could use a test in tools/patman/test.py
>>
>> The problem is that you are breaking the patch-processing part of this
>> code. It operates in two modes - see the comment at the top of
>> ProcessLine(). With your change it will not process patches correctly,
>> e.g. to add Commit-notes: to the patch.
>
> How would this patch would make any difference in the "self.is_log ==
> False" case?  The whitespace removal that this patch reorders around
> won't be executed, and commit_match will be None regardless.

You are changing it so that commit_match will always be None for patches.

This means that the commit message in a patch will never be found, so
the state machine that tracks where it is in the patch will not
function.

Try adding something like:

Commit-notes:
this is a note
more stuff
END

to a commit and then run patman. You will see that the commit notes
are not parsed.

Regards,
Simon


More information about the U-Boot mailing list