git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] Use diff* with --exit-code in git-am, git-rebase and git-merge-ours

From
Alex Riesen <raa.lkml@gmail.com>
Date
Mar 25, 2007, 00:42 UTC
Message-ID
<20070325004256.GB11507@steel.home>

This simplifies the shell code and reduces memory footprint, speeds things up. The performance improvements should be noticable by git-rebase, when it is used to rebase big commits.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
---
 git-am.sh         |   18 +++++++-----------
 git-merge-ours.sh |    2 +-
 git-rebase.sh     |   10 ++++------
 3 files changed, 12 insertions(+), 18 deletions(-)
diff --git a/git-am.sh b/git-am.sh
index 88af8dd..e9d8d57 100755
--- 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 --exit-code --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 --exit-code --cached HEAD && {
+			echo No changes -- Patch already applied.
+			go_next
+			continue
+		    }
 		    # clear apply_status -- we have successfully merged.
 		    apply_status=0
 		fi
diff --git a/git-merge-ours.sh b/git-merge-ours.sh
index 4f3d053..40491f2 100755
--- a/git-merge-ours.sh
+++ b/git-merge-ours.sh
@@ -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 --exit-code --cached HEAD || exit 2
 
 exit 0
diff --git a/git-rebase.sh b/git-rebase.sh
index aadd580..860c0ce 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -59,7 +59,7 @@ continue_merge () {
 		die "$RESOLVEMSG"
 	fi
 
-	if test -n "`git-diff-index HEAD`"
+	if ! git-diff-index --quiet --exit-code 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 --exit-code || {
+			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`"
-- 
1.5.1.rc1.63.g59cc5
Next: Alex Riesen
Message 1 of 2 in “Use diff* with --exit-code in git-am, git-rebase and git-merge-ours”
  1. Use diff* with --exit-code in git-am, git-rebase and git-merge-oursAlex Riesen, Mar 25, 2007
  2. Alex RiesenMar 25, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.