git-rebase -i: clean-up error check codepath.
authorJunio C Hamano <gitster@pobox.com>
Sun, 30 Dec 2007 20:51:42 +0000 (12:51 -0800)
committerJunio C Hamano <gitster@pobox.com>
Sun, 30 Dec 2007 20:51:42 +0000 (12:51 -0800)
After replaying a single change, the code performed a number of checks,
but some of them were for sanity checking, failures from which should
make the command abort, and others were checks to see if it should make
a new commit object.  Stringing them together with "&&" was wrong.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-rebase--interactive.sh

index d0d83c35e6fcebfabef2a8741d1b492b36aebf90..acdcc5417a45d1419c8316734e3b742123e5aad4 100755 (executable)
@@ -365,17 +365,26 @@ do
 
                test -d "$DOTEST" || die "No interactive rebase running"
 
-               # commit if necessary
-               git rev-parse --verify HEAD > /dev/null &&
-               git update-index --refresh &&
-               git diff-files --quiet &&
-               ! git diff-index --cached --quiet HEAD -- &&
-               . "$DOTEST"/author-script && {
-                       test ! -f "$DOTEST"/amend || git reset --soft HEAD^
-               } &&
-               export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE &&
-               if ! git commit --no-verify -F "$DOTEST"/message -e
+               # Sanity check
+               git rev-parse --verify HEAD >/dev/null ||
+                       die "Cannot read HEAD"
+               git update-index --refresh && git diff-files --quiet ||
+                       die "Working tree is dirty"
+
+               # do we have anything to commit?
+               if git diff-index --cached --quiet HEAD --
                then
+                       : Nothing to commit -- skip this
+               else
+                       . "$DOTEST"/author-script ||
+                               die "Cannot find the author identity"
+                       if test -f "$DOTEST"/amend
+                       then
+                               git reset --soft HEAD^ ||
+                               die "Cannot rewind the HEAD"
+                       fi
+                       export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE &&
+                       git commit --no-verify -F "$DOTEST"/message -e ||
                        die "Could not commit staged changes."
                fi