From: Paolo Bonzini Date: Fri, 06 Oct 2017 10:40:36 GMT Subject: Re: [RFC PATCH 0/4] interpret-trailers: introduce "move" action Message-ID: <748131b7-bddd-08c2-ff72-9fd1a63ef6a0@redhat.com> In-Reply-To: On 06/10/2017 12:30, Christian Couder wrote: > On Thu, Oct 5, 2017 at 3:22 PM, Paolo Bonzini wrote: >> The purpose of this action is for scripts to be able to keep the >> user's Signed-off-by at the end. For example say I have a script >> that adds a Reviewed-by tag: >> >> #! /bin/sh >> them=$(git log -i -1 --pretty='format:%an <%ae>' --author="$*") >> trailer="Reviewed-by: $them" >> git log -1 --pretty=format:%B | \ >> git interpret-trailers --where end --if-exists doNothing --trailer "$trailer" | \ >> git commit --amend -F- >> >> Now, this script will leave my Signed-off-by line in a non-canonical >> place, like >> >> Signed-off-by: Paolo Bonzini >> Reviewed-by: Junio C Hamano >> >> This new option enables the following improvement: >> >> #! /bin/sh >> me=$(git var GIT_COMMITTER_IDENT | sed 's,>.*,>,') >> them=$(git log -i -1 --pretty='format:%an <%ae>' --author="$*") >> trailer="Reviewed-by: $them" >> sob="Signed-off-by: $me" >> git log -1 --pretty=format:%B | \ >> git interpret-trailers --where end --if-exists doNothing --trailer "$trailer" \ >> --where end --if-exists move --if-missing doNothing --trailer "$sob" | \ >> git commit --amend -F- >> >> which lets me keep the SoB line at the end, as it should be. >> Posting as RFC because it's possible that I'm missing a simpler >> way to achieve this... > > Did you try using `--where end --if-exists replace --trailer "$sob"`? Yes, it's a different behavior; "--if-exists replace" matches on others' SoB as well, so it would eat the original author's SoB if I didn't have one. So "move" does get it wrong for Signed-off-by: Me Signed-off-by: Friend (Me gets moved last, which may not be what you want) but "replace" gets it wrong in the arguably more common case of Signed-off-by: Friend which is damaged to just "Signed-off-by: Me". Paolo