This is similar to the existing "reword" command in that it can be used
to update the commit message the difference is that the editor presented
to the user for the commit. It provides a useful shorthand for "exec git
commit --amend --no-edit -s"

Signed-off-by: Chris Packham <judge.pack...@gmail.com>
---
Hi,

At $dayjob we have a patch based work-flow where committers sign patches on the
way through. Occasionally when a larger patch series is involved it's easier
pull from the submitter's repo and use git rebase -i to add the required sign
off either by using 'reword' or 'exec git commit --amend -s'.

This is my attempt at making this a little less cumbersome by adding a
'sign' command. I decided not to add a short version of the command,
partly because 's' was taken and partly because it is a bit of a niche
use-case.

Thanks,
Chris

 git-rebase--interactive.sh    | 10 +++++++++-
 t/lib-rebase.sh               |  2 +-
 t/t3404-rebase-interactive.sh |  9 +++++++++
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index ded4595..1cd8bc6 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -148,6 +148,7 @@ append_todo_help () {
 Commands:
  p, pick = use commit
  r, reword = use commit, but edit the commit message
+ sign = use commit, add sign-off to the commit message
  e, edit = use commit, but stop for amending
  s, squash = use commit, but meld into previous commit
  f, fixup = like \"squash\", but discard this commit's log message
@@ -594,6 +595,13 @@ you are able to reword the commit.")"
                }
                record_in_rewritten $sha1
                ;;
+       sign)
+               comment_for_reflog sign
+               mark_action_done
+               do_pick $sha1 "$rest"
+               git commit --amend -s --no-post-rewrite --no-edit 
${gpg_sign_opt:+"$gpg_sign_opt"}
+               record_in_rewritten $sha1
+               ;;
        edit|e)
                comment_for_reflog edit
 
@@ -959,7 +967,7 @@ check_bad_cmd_and_sha () {
                        # Work around CR left by "read" (e.g. with Git for
                        # Windows' Bash).
                        ;;
-               pick|p|drop|d|reword|r|edit|e|squash|s|fixup|f)
+               pick|p|drop|d|reword|r|sign|edit|e|squash|s|fixup|f)
                        if ! check_commit_sha "${rest%%[        ]*}" "$lineno" 
"$1"
                        then
                                retval=1
diff --git a/t/lib-rebase.sh b/t/lib-rebase.sh
index 25a77ee..5a54228 100644
--- a/t/lib-rebase.sh
+++ b/t/lib-rebase.sh
@@ -47,7 +47,7 @@ set_fake_editor () {
        action=pick
        for line in $FAKE_LINES; do
                case $line in
-               squash|fixup|edit|reword|drop)
+               squash|fixup|edit|reword|sign|drop)
                        action="$line";;
                exec*)
                        echo "$line" | sed 's/_/ /g' >> "$1";;
diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
index 197914b..e473ffb 100755
--- a/t/t3404-rebase-interactive.sh
+++ b/t/t3404-rebase-interactive.sh
@@ -690,6 +690,15 @@ test_expect_success 'reword' '
        git show HEAD~2 | grep "C changed"
 '
 
+test_expect_success 'sign-off' '
+       git checkout -b sign-off-branch master &&
+       set_fake_editor &&
+       FAKE_LINES="1 2 3 sign 4" git rebase -i A &&
+       git show HEAD | grep "Signed-off-by:" &&
+       test $(git rev-parse master) != $(git rev-parse HEAD) &&
+       test $(git rev-parse master^) = $(git rev-parse HEAD^)
+'
+
 test_expect_success 'rebase -i can copy notes' '
        git config notes.rewrite.rebase true &&
        git config notes.rewriteRef "refs/notes/*" &&
-- 
2.9.2.518.ged577c6.dirty

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