Catch and handle git-commit failures in git-rebase --interactive
authorShawn O. Pearce <spearce@spearce.org>
Wed, 19 Dec 2007 06:45:00 +0000 (01:45 -0500)
committerJunio C Hamano <gitster@pobox.com>
Thu, 20 Dec 2007 01:17:27 +0000 (17:17 -0800)
If git-commit fails for any reason then git-rebase needs to stop
and not plow through the rest of the series.  Its unlikely that
a future git-commit will succeed if the current attempt failed.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-rebase--interactive.sh

index fa9c11f1736b27d58ffed84be693b80b7f21465d..47581ced5a862a8d21f09d096fe9b20507e27274 100755 (executable)
@@ -289,22 +289,22 @@ do_next () {
                output git reset --soft HEAD^
                pick_one -n $sha1 || failed=t
                echo "$author_script" > "$DOTEST"/author-script
-               case $failed in
-               f)
+               if test $failed = f
+               then
                        # This is like --amend, but with a different message
                        eval "$author_script"
                        GIT_AUTHOR_NAME="$GIT_AUTHOR_NAME" \
                        GIT_AUTHOR_EMAIL="$GIT_AUTHOR_EMAIL" \
                        GIT_AUTHOR_DATE="$GIT_AUTHOR_DATE" \
-                       $USE_OUTPUT git commit --no-verify -F "$MSG" $EDIT_COMMIT
-                       ;;
-               t)
+                       $USE_OUTPUT git commit --no-verify -F "$MSG" $EDIT_COMMIT || failed=t
+               fi
+               if test $failed = t
+               then
                        cp "$MSG" "$GIT_DIR"/MERGE_MSG
                        warn
                        warn "Could not apply $sha1... $rest"
                        die_with_patch $sha1 ""
-                       ;;
-               esac
+               fi
                ;;
        *)
                warn "Unknown command: $command $sha1 $rest"
@@ -372,7 +372,8 @@ do
                        test ! -f "$DOTEST"/amend || git reset --soft HEAD^
                } &&
                export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE &&
-               git commit --no-verify -F "$DOTEST"/message -e
+               git commit --no-verify -F "$DOTEST"/message -e ||
+                       die "Could not commit staged changes."
 
                require_clean_work_tree
                do_rest