I'm using different signature tags for git am depending on the patch,
project and other factors.

Sometimes I add multiple tags as well, e.g. QEMU
wants both Reviewed-by and Signed-off-by tags.

This patch makes it easy to do so:
1.  new parameter am.signoff can be used any number
        of times:

        signoff = "Reviewed-by: Michael S. Tsirkin <m...@redhat.com>"

        Will add reviewed by tag in addition to the S.O.B.
        if set all signatures are picked up when git am -s is used.

2.  Any number of alternative signatures

[am "a"]
        signoff = "Acked-by: Michael S. Tsirkin <m...@redhat.com>"
[am "t"]
        signoff = "Tested-by: Michael S. Tsirkin <m...@redhat.com>"

        if set the signature type can be specified by passing
        a parameter to the -s flag:

        git am -sa

A combination is supported:
        git am -sa -st

No docs or tests, sorry, so not yet ready for master, but I'm using this
all the time without any issues so maybe ok for pu.
Early flames/feedback/help welcome.

Changes from v1:
        Address Junio's feedback:
        Default signature is always applied.
        This is to make it a no-brainer for people to track using DCO.
        De-duplication fixed (works for default signature only
        as other signatures might make sense multiple times).

Signed-off-by: Michael S. Tsirkin <m...@redhat.com>
 git-am.sh | 28 +++++++++++++++++++++++-----
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/git-am.sh b/git-am.sh
index ee61a77..c1246e6 100755
--- a/git-am.sh
+++ b/git-am.sh
@@ -13,7 +13,7 @@ i,interactive   run interactively
 b,binary*       (historical option -- no-op)
 3,3way          allow fall back on 3way merging if needed
 q,quiet         be quiet
-s,signoff       add a Signed-off-by line to the commit message
+s,signoff?      add a Signed-off-by line to the commit message
 u,utf8          recode into utf8 (default)
 k,keep          pass -k flag to git-mailinfo
 keep-non-patch  pass -b flag to git-mailinfo
@@ -383,6 +383,7 @@ then
 while test $# != 0
        case "$1" in
@@ -394,8 +395,15 @@ it will be removed. Please do not use it anymore."
                threeway=t ;;
-       -s|--signoff)
-               sign=t ;;
+       --signoff)
+               sign=t
+               s=$(git config --get-all am.signoff)
+               signoffs=("${signoffs[@]}" "${s[@]}") ;;
+       --signoff=*)
+               sign=t
+               a="${1#--signoff=}"
+               s=$(git config --get-all am."${a}".signoff)
+               signoffs=("${signoffs[@]}" "${s[@]}") ;;
                utf8=t ;; # this is now default
@@ -642,6 +650,16 @@ then
 git_apply_opt=$(cat "$dotest/apply-opt")
+for ack in "${signoffs[@]}"; do
+       if test "$EXTRA_SIGNOFFS"
+       then
+               EXTRA_SIGNOFFS=$(printf "%s\n%s" "$SIGNOFF" "$ack")
+       else
+               EXTRA_SIGNOFFS="$ack"
+       fi
 if test "$(cat "$dotest/sign")" = t
        SIGNOFF=$(git var GIT_COMMITTER_IDENT | sed -e '
@@ -744,13 +762,13 @@ To restore the original branch and stop patching run 
\"\$cmdline --abort\"."
                    "$dotest/msg-clean" |
                    sed -ne '$p'
-               ADD_SIGNOFF=$(
+               ADD_SIGNOFF="$EXTRA_SIGNOFFS"$(
                    test "$LAST_SIGNED_OFF_BY" = "$SIGNOFF" || {
                    test '' = "$LAST_SIGNED_OFF_BY" && echo
                    echo "$SIGNOFF"
-               ADD_SIGNOFF=
                if test -s "$dotest/msg-clean"
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to