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:

[am]
        signoff = "Reviewed-by: Michael S. Tsirkin <m...@redhat.com>"
        signoff = "Signed-off-by: Michael S. Tsirkin <m...@redhat.com>"

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

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

        git am -sa

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.

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

diff --git a/git-am.sh b/git-am.sh
index ee61a77..e992c34 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
@@ -136,7 +136,7 @@ fall_back_3way () {
     eval "$cmd" &&
     GIT_INDEX_FILE="$dotest/patch-merge-tmp-index" \
     git write-tree >"$dotest/patch-merge-base+" ||
-    cannot_fallback "$(gettext "Repository lacks necessary blobs to fall back 
on 3-way merge.")"
+    cannot_fallback "$(gettext "Repository lsignoffs necessary blobs to fall 
back on 3-way merge.")"
 
     say "$(gettext "Using index info to reconstruct a base tree...")"
 
@@ -383,6 +383,7 @@ then
     keepcr=t
 fi
 
+signoffs=
 while test $# != 0
 do
        case "$1" in
@@ -394,8 +395,15 @@ it will be removed. Please do not use it anymore."
                ;;
        -3|--3way)
                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[@]}") ;;
        -u|--utf8)
                utf8=t ;; # this is now default
        --no-utf8)
@@ -644,14 +652,25 @@ fi
 git_apply_opt=$(cat "$dotest/apply-opt")
 if test "$(cat "$dotest/sign")" = t
 then
-       SIGNOFF=$(git var GIT_COMMITTER_IDENT | sed -e '
-                       s/>.*/>/
-                       s/^/Signed-off-by: /'
-               )
+       for ack in "${signoffs[@]}"; do
+               if test "$SIGNOFF"
+               then
+                       SIGNOFF="$SIGNOFF\n$ack"
+               else
+                       SIGNOFF="$ack"
+               fi
+       done
+       if test -z "$SIGNOFF"
+       then
+               SIGNOFF=$(git var GIT_COMMITTER_IDENT | sed -e '
+                               s/>.*/>/
+                               s/^/Signed-off-by: /'
+                       )
+       fi
 else
        SIGNOFF=
 fi
 
 last=$(cat "$dotest/last")
 this=$(cat "$dotest/next")
 if test "$skip" = t
-- 
MST
--
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