[U-Boot] Formal acks and patchwork
Albert ARIBAUD
albert.u.boot at aribaud.net
Mon May 23 22:15:21 CEST 2011
Le 23/05/2011 21:42, Wolfgang Denk a écrit :
> Dear Albert ARIBAUD,
>
> In message<4DDAB341.20006 at aribaud.net> you wrote:
>>
>>> For example, instead of applying a patch directly from my mailbox I
>>> use this file only to get the hash value for the PW entry, and then
>>> use pwclient to apply it and to update it's state:
>>>
>>> HASH=$(pwparser.py --hash<$PATCH)
>>> if [ -z "$HASH" ]
>>> then
>>> echo "ERROR: $PATCH - no such entry in PatchWork">&2
>>> exit 1
>>> fi
>>>
>>> if pwclient apply -h $HASH
>>> then
>>> pwclient update -s 'Accepted' -h $HASH
>>> fi
>>>
>>> This is extremely convenient as it automatically takes care of both
>>> the Acks and the state change.
>>
>> Thanks. Looks like this could be handy for many others. Maybe it should
>> be 'backported' into pwclient itself as a new command.
>
> Note that there is a caveat of this approach. Or call it bug in PW.
> We frequently see patch series, which get posted in several versions.
> Quite often not all patches are changed, so it happens that for
> example patch 3/8 is the same in all versions 2, 3 and 4 of the patch
> series. That means all versions of this patch have the same hash.
> Usually I apply the latest version, and want to change the status of
> this one, but the 'pwclient -h $HASH' will always reference the
> _oldest_ version of the patch. So watchout when you see it changing
> the state from "superseded" to "applied" - usually this means it
> changed the wrong version. [I reported this on the PW ML, but no
> response yet.]
>
> I should mention that I have hacked pwclient a bit to use "git am"
> instead of plain "patch", and to report the status change:
>
> @@ -110,7 +110,7 @@
> (os.path.basename(sys.argv[0])))
> sys.stderr.write("Where<action> is one of:\n")
> sys.stderr.write(
> -""" apply<ID> : Apply a patch (in the current dir, using -p1)
> +""" apply<ID> : Apply a patch (using 'git-am -3 -u --whitespace=strip')
> get<ID> : Download a patch and save it locally
> projects : List all projects
> states : Show list of potential patch states
> @@ -260,7 +260,7 @@
> print "Description: %s" % patch['name']
> s = rpc.patch_get_mbox(patch_id)
> if len(s)> 0:
> - proc = subprocess.Popen(['patch', '-p1'], stdin = subprocess.PIPE)
> + proc = subprocess.Popen(['git', 'am', '-3', '-u', '--whitespace=strip'], stdin = subprocess.PIPE)
> proc.communicate(s)
> else:
> sys.stderr.write("Error: No patch content found\n")
> @@ -280,6 +280,8 @@
> if state_id == 0:
> sys.stderr.write("Error: No State found matching %s*\n" % state)
> sys.exit(1)
> + old_id = patch['state']
> + sys.stderr.write("## commit: %s state: %s ==> %s\n" % (commit, old_id, state))
> params['state'] = state_id
>
> if commit:
I personally only added a "pwclient am" command to do a git am, the same
way as "pwclient apply" does a git apply.
> Best regards,
>
> Wolfgang Denk
Amicalement,
--
Albert.
More information about the U-Boot
mailing list