On 06/10/2017 12:30, Christian Couder wrote: > On Thu, Oct 5, 2017 at 3:22 PM, Paolo Bonzini <pbonzini@xxxxxxxxxx> 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 <pbonzini@xxxxxxxxxx> >> Reviewed-by: Junio C Hamano <gitster@xxxxxxxxx> >> >> 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