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 <pbonz...@redhat.com>
   Reviewed-by: Junio C Hamano <gits...@pobox.com>

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...

Paolo Bonzini (4):
  trailer: push free_arg_item up
  trailer: simplify check_if_different
  trailer: create a new function to handle adding trailers
  trailer: add "move" configuration for trailer.ifExists

 Documentation/git-interpret-trailers.txt |  13 ++-
 t/t7513-interpret-trailers.sh            |  37 +++++++
 trailer.c                                | 169 ++++++++++++++++++-------------
 trailer.h                                |   1 +
 4 files changed, 149 insertions(+), 71 deletions(-)

-- 
2.14.2

Reply via email to