Since `do_pick` might be executed in a sub-shell (a modified author
environment for instance), calling `die` in `do_pick` has no effect but
exiting the sub-shell with a failure exit status. Moreover, if `do_pick`
is called while a squash or fixup is happening, `die_with_patch` will
discard `$squash_msg` as commit message. Indicate an error in `do_pick`
using return statements and properly kill the script at the call sites.
Remove unused commit message title argument from `do_pick`'s signature.

Signed-off-by: Fabian Ruch <baf...@gmail.com>
---
 git-rebase--interactive.sh | 33 ++++++++++++++++++---------------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index f903599..e4992dc 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -493,14 +493,10 @@ record_in_rewritten() {
 
 # Apply the changes introduced by the given commit to the current head.
 #
-# do_pick [--edit] <commit> <title>
+# do_pick [--edit] <commit>
 #
 # Wrapper around git-cherry-pick.
 #
-# <title>
-#     The commit message title of <commit>. Used for information
-#     purposes only.
-#
 # <commit>
 #     The commit to cherry-pick.
 #
@@ -508,6 +504,12 @@ record_in_rewritten() {
 #     After picking <commit>, open an editor and let the user edit the
 #     commit message. The editor contents becomes the commit message of
 #     the new head.
+#
+# The return value is 1 if applying the changes resulted in a conflict
+# and 2 if the specified arguments were incorrect. If the changes could
+# be applied successfully but creating the commit failed, a value
+# greater than 2 is returned. No commit is created in either case and
+# the index is left with the (conflicting) changes in place.
 do_pick () {
        rewrite=
        rewrite_amend=
@@ -528,7 +530,11 @@ do_pick () {
                esac
                shift
        done
-       test $# -ne 2 && die "do_pick: wrong number of arguments"
+       if test $# -ne 1
+       then
+               warn "do_pick: wrong number of arguments"
+               return 2
+       fi
 
        if test "$(git rev-parse HEAD)" = "$squash_onto"
        then
@@ -545,11 +551,9 @@ do_pick () {
                # rebase --continue.
                git commit --allow-empty --allow-empty-message --amend \
                           --no-post-rewrite -n -q -C $1 &&
-                       pick_one -n $1 ||
-                       die_with_patch $1 "Could not apply $1... $2"
+                       pick_one -n $1 || return 1
        else
-               pick_one ${rewrite:+-n} $1 ||
-                       die_with_patch $1 "Could not apply $1... $2"
+               pick_one ${rewrite:+-n} $1 || return 1
        fi
 
        if test -n "$rewrite"
@@ -557,8 +561,7 @@ do_pick () {
                git commit --allow-empty --no-post-rewrite -n -q \
                           ${rewrite_amend:+--amend} \
                           ${rewrite_edit:+--edit} \
-                          ${gpg_sign_opt:+"$gpg_sign_opt"} ||
-                       die_with_patch $1 "Could not rewrite commit after 
successfully picking $1... $2"
+                          ${gpg_sign_opt:+"$gpg_sign_opt"} || return 3
        fi
 }
 
@@ -573,21 +576,21 @@ do_next () {
                comment_for_reflog pick
 
                mark_action_done
-               do_pick $sha1 "$rest"
+               do_pick $sha1 || die_with_patch $sha1 "Could not apply $sha1... 
$rest"
                record_in_rewritten $sha1
                ;;
        reword|r)
                comment_for_reflog reword
 
                mark_action_done
-               do_pick --edit $sha1 "$rest"
+               do_pick --edit $sha1 || die_with_patch $sha1 "Could not apply 
$sha1... $rest"
                record_in_rewritten $sha1
                ;;
        edit|e)
                comment_for_reflog edit
 
                mark_action_done
-               do_pick $sha1 "$rest"
+               do_pick $sha1 || die_with_patch $sha1 "Could not apply $sha1... 
$rest"
                warn "Stopped at $sha1... $rest"
                exit_with_patch $sha1 0
                ;;
-- 
2.0.0


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