Use diff* with --exit-code in git-am, git-rebase and git-merge-ours
authorAlex Riesen <raa.lkml@gmail.com>
Sun, 25 Mar 2007 00:56:13 +0000 (01:56 +0100)
committerJunio C Hamano <junkio@cox.net>
Sun, 25 Mar 2007 06:01:36 +0000 (23:01 -0700)
This simplifies the shell code, reduces its memory footprint, and
speeds things up. The performance improvements should be noticable
when git-rebase works on big commits.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
git-am.sh
git-merge-ours.sh
git-rebase.sh

index 88af8dd..e69ecbf 100755 (executable)
--- a/git-am.sh
+++ b/git-am.sh
@@ -408,12 +408,10 @@ do
                # trust what the user has in the index file and the
                # working tree.
                resolved=
-               changed="$(git-diff-index --cached --name-only HEAD)"
-               if test '' = "$changed"
-               then
+               git-diff-index --quiet --cached HEAD && {
                        echo "No changes - did you forget to use 'git add'?"
                        stop_here_user_resolve $this
-               fi
+               }
                unmerged=$(git-ls-files -u)
                if test -n "$unmerged"
                then
@@ -435,13 +433,11 @@ do
                then
                    # Applying the patch to an earlier tree and merging the
                    # result may have produced the same tree as ours.
-                   changed="$(git-diff-index --cached --name-only HEAD)"
-                   if test '' = "$changed"
-                   then
-                           echo No changes -- Patch already applied.
-                           go_next
-                           continue
-                   fi
+                   git-diff-index --quiet --cached HEAD && {
+                       echo No changes -- Patch already applied.
+                       go_next
+                       continue
+                   }
                    # clear apply_status -- we have successfully merged.
                    apply_status=0
                fi
index 4f3d053..2b6a5c0 100755 (executable)
@@ -9,6 +9,6 @@
 # because the current index is what we will be committing as the
 # merge result.
 
-test "$(git-diff-index --cached --name-status HEAD)" = "" || exit 2
+git-diff-index --quiet --cached HEAD || exit 2
 
 exit 0
index aadd580..1d96f32 100755 (executable)
@@ -59,7 +59,7 @@ continue_merge () {
                die "$RESOLVEMSG"
        fi
 
-       if test -n "`git-diff-index HEAD`"
+       if ! git-diff-index --quiet HEAD
        then
                if ! git-commit -C "`cat $dotest/current`"
                then
@@ -124,13 +124,11 @@ while case "$#" in 0) break ;; esac
 do
        case "$1" in
        --continue)
-               diff=$(git-diff-files)
-               case "$diff" in
-               ?*)     echo "You must edit all merge conflicts and then"
+               git-diff-files --quiet || {
+                       echo "You must edit all merge conflicts and then"
                        echo "mark them as resolved using git update-index"
                        exit 1
-                       ;;
-               esac
+               }
                if test -d "$dotest"
                then
                        prev_head="`cat $dotest/prev_head`"