git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stephan Beyer <s-beyer@gmx.net>
To: git@vger.kernel.org
Cc: Stephan Beyer <s-beyer@gmx.net>,
	Christian Couder <christian.couder@gmail.com>,
	Junio C Hamano <gitster@pobox.com>
Subject: [PATCH v2 04/21] t: use test_cmp_rev() where appropriate
Date: Sun, 10 Apr 2016 15:18:57 +0200	[thread overview]
Message-ID: <1460294354-7031-5-git-send-email-s-beyer@gmx.net> (raw)
In-Reply-To: <1460294354-7031-1-git-send-email-s-beyer@gmx.net>

test_cmp_rev() from t/test-lib-functions.sh is used to make many
tests clearer.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
---

Notes:
    This change is in some way independent of the bisect topic but
    the next patch is based on this (for t6030).

 t/t2012-checkout-last.sh                  |  8 ++--
 t/t3308-notes-merge.sh                    |  8 ++--
 t/t3310-notes-merge-manual-resolve.sh     |  8 ++--
 t/t3311-notes-merge-fanout.sh             |  6 +--
 t/t3404-rebase-interactive.sh             | 38 +++++++--------
 t/t3407-rebase-abort.sh                   |  8 ++--
 t/t3410-rebase-preserve-dropped-merges.sh |  4 +-
 t/t3411-rebase-preserve-around-merges.sh  | 10 ++--
 t/t3414-rebase-preserve-onto.sh           | 12 ++---
 t/t3501-revert-cherry-pick.sh             |  4 +-
 t/t3506-cherry-pick-ff.sh                 |  6 +--
 t/t3903-stash.sh                          |  6 +--
 t/t4150-am.sh                             | 18 +++----
 t/t5404-tracking-branches.sh              |  2 +-
 t/t5505-remote.sh                         |  4 +-
 t/t5520-pull.sh                           | 36 +++++++-------
 t/t6022-merge-rename.sh                   |  2 +-
 t/t6030-bisect-porcelain.sh               | 79 ++++++++++++-------------------
 t/t6036-recursive-corner-cases.sh         | 58 +++++++++++------------
 t/t6042-merge-rename-corner-cases.sh      | 50 +++++++++----------
 t/t7003-filter-branch.sh                  |  8 ++--
 t/t7004-tag.sh                            |  2 +-
 t/t7110-reset-merge.sh                    | 24 +++++-----
 t/t7201-co.sh                             | 12 ++---
 t/t7601-merge-pull-config.sh              | 17 ++++---
 t/t7603-merge-reduce-heads.sh             | 30 ++++++------
 t/t7605-merge-resolve.sh                  |  5 +-
 t/t9162-git-svn-dcommit-interactive.sh    |  8 ++--
 t/t9300-fast-import.sh                    | 12 ++---
 29 files changed, 232 insertions(+), 253 deletions(-)

diff --git a/t/t2012-checkout-last.sh b/t/t2012-checkout-last.sh
index e7ba8c5..64cb449 100755
--- a/t/t2012-checkout-last.sh
+++ b/t/t2012-checkout-last.sh
@@ -43,7 +43,7 @@ test_expect_success '"checkout -" attaches again' '
 
 test_expect_success '"checkout -" detaches again' '
 	git checkout - &&
-	test "z$(git rev-parse HEAD)" = "z$(git rev-parse other)" &&
+	test_cmp_rev HEAD other &&
 	test_must_fail git symbolic-ref HEAD
 '
 
@@ -101,19 +101,19 @@ test_expect_success 'merge base test setup' '
 test_expect_success 'another...master' '
 	git checkout another &&
 	git checkout another...master &&
-	test "z$(git rev-parse --verify HEAD)" = "z$(git rev-parse --verify master^)"
+	test_cmp_rev HEAD master^
 '
 
 test_expect_success '...master' '
 	git checkout another &&
 	git checkout ...master &&
-	test "z$(git rev-parse --verify HEAD)" = "z$(git rev-parse --verify master^)"
+	test_cmp_rev HEAD master^
 '
 
 test_expect_success 'master...' '
 	git checkout another &&
 	git checkout master... &&
-	test "z$(git rev-parse --verify HEAD)" = "z$(git rev-parse --verify master^)"
+	test_cmp_rev HEAD master^
 '
 
 test_expect_success '"checkout -" works after a rebase A' '
diff --git a/t/t3308-notes-merge.sh b/t/t3308-notes-merge.sh
index 19aed7e..1f72e9e 100755
--- a/t/t3308-notes-merge.sh
+++ b/t/t3308-notes-merge.sh
@@ -93,7 +93,7 @@ test_expect_success 'merge non-notes ref into empty notes ref (remote-notes/orig
 	git notes merge refs/remote-notes/origin/x &&
 	verify_notes v &&
 	# refs/remote-notes/origin/x and v should point to the same notes commit
-	test "$(git rev-parse refs/remote-notes/origin/x)" = "$(git rev-parse refs/notes/v)"
+	test_cmp_rev refs/remote-notes/origin/x refs/notes/v
 '
 
 test_expect_success 'merge notes into empty notes ref (x => y)' '
@@ -101,13 +101,13 @@ test_expect_success 'merge notes into empty notes ref (x => y)' '
 	git notes merge x &&
 	verify_notes y &&
 	# x and y should point to the same notes commit
-	test "$(git rev-parse refs/notes/x)" = "$(git rev-parse refs/notes/y)"
+	test_cmp_rev refs/notes/x refs/notes/y
 '
 
 test_expect_success 'merge empty notes ref (z => y)' '
 	git notes merge z &&
 	# y should not change (still == x)
-	test "$(git rev-parse refs/notes/x)" = "$(git rev-parse refs/notes/y)"
+	test_cmp_rev refs/notes/x refs/notes/y
 '
 
 test_expect_success 'change notes on other notes ref (y)' '
@@ -174,7 +174,7 @@ test_expect_success 'merge changed (y) into original (x) => Fast-forward' '
 	verify_notes x &&
 	verify_notes y &&
 	# x and y should point to same the notes commit
-	test "$(git rev-parse refs/notes/x)" = "$(git rev-parse refs/notes/y)"
+	test_cmp_rev refs/notes/x refs/notes/y
 '
 
 test_expect_success 'merge empty notes ref (z => y)' '
diff --git a/t/t3310-notes-merge-manual-resolve.sh b/t/t3310-notes-merge-manual-resolve.sh
index d557212..5e46fcf 100755
--- a/t/t3310-notes-merge-manual-resolve.sh
+++ b/t/t3310-notes-merge-manual-resolve.sh
@@ -516,7 +516,7 @@ cp expect_log_w expect_log_m
 test_expect_success 'reset notes ref m to somewhere else (w)' '
 	git update-ref refs/notes/m refs/notes/w &&
 	verify_notes m &&
-	test "$(git rev-parse refs/notes/m)" = "$(git rev-parse refs/notes/w)"
+	test_cmp_rev refs/notes/m refs/notes/w
 '
 
 test_expect_success 'fail to finalize conflicting merge if underlying ref has moved in the meantime (m != NOTES_MERGE_PARTIAL^1)' '
@@ -537,8 +537,8 @@ EOF
 	test -f .git/NOTES_MERGE_WORKTREE/$commit_sha3 &&
 	test -f .git/NOTES_MERGE_WORKTREE/$commit_sha4 &&
 	# Refs are unchanged
-	test "$(git rev-parse refs/notes/m)" = "$(git rev-parse refs/notes/w)" &&
-	test "$(git rev-parse refs/notes/y)" = "$(git rev-parse NOTES_MERGE_PARTIAL^1)" &&
+	test_cmp_rev refs/notes/m refs/notes/w &&
+	test_cmp_rev refs/notes/y NOTES_MERGE_PARTIAL^1 &&
 	test "$(git rev-parse refs/notes/m)" != "$(git rev-parse NOTES_MERGE_PARTIAL^1)" &&
 	# Mention refs/notes/m, and its current and expected value in output
 	grep -q "refs/notes/m" output &&
@@ -557,7 +557,7 @@ test_expect_success 'resolve situation by aborting the notes merge' '
 	test_might_fail ls .git/NOTES_MERGE_* >output 2>/dev/null &&
 	test_cmp /dev/null output &&
 	# m has not moved (still == w)
-	test "$(git rev-parse refs/notes/m)" = "$(git rev-parse refs/notes/w)" &&
+	test_cmp_rev refs/notes/m refs/notes/w &&
 	# Verify that other notes refs has not changed (w, x, y and z)
 	verify_notes w &&
 	verify_notes x &&
diff --git a/t/t3311-notes-merge-fanout.sh b/t/t3311-notes-merge-fanout.sh
index 93516ef..3fb4d11 100755
--- a/t/t3311-notes-merge-fanout.sh
+++ b/t/t3311-notes-merge-fanout.sh
@@ -135,13 +135,13 @@ test_expect_success 'No-op merge (already included) (x => y)' '
 	git update-ref refs/notes/m refs/notes/y &&
 	git config core.notesRef refs/notes/m &&
 	git notes merge x &&
-	test "$(git rev-parse refs/notes/m)" = "$(git rev-parse refs/notes/y)"
+	test_cmp_rev refs/notes/m refs/notes/y
 '
 
 test_expect_success 'Fast-forward merge (y => x)' '
 	git update-ref refs/notes/m refs/notes/x &&
 	git notes merge y &&
-	test "$(git rev-parse refs/notes/m)" = "$(git rev-parse refs/notes/y)"
+	test_cmp_rev refs/notes/m refs/notes/y
 '
 
 cat <<EOF | sort >expect_notes_z
@@ -394,7 +394,7 @@ test_expect_success 'verify conflict entries (with no fanout)' '
 		exit 1
 	done ) &&
 	# Verify that current notes tree (pre-merge) has not changed (m == w)
-	test "$(git rev-parse refs/notes/m)" = "$(git rev-parse refs/notes/w)"
+	test_cmp_rev refs/notes/m refs/notes/w
 '
 
 cat >expect_log_m <<EOF
diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
index b79f442..9b15995 100755
--- a/t/t3404-rebase-interactive.sh
+++ b/t/t3404-rebase-interactive.sh
@@ -131,7 +131,7 @@ test_expect_success 'no changes are a nop' '
 	set_fake_editor &&
 	git rebase -i F &&
 	test "$(git symbolic-ref -q HEAD)" = "refs/heads/branch2" &&
-	test $(git rev-parse I) = $(git rev-parse HEAD)
+	test_cmp_rev I HEAD
 '
 
 test_expect_success 'test the [branch] option' '
@@ -141,8 +141,8 @@ test_expect_success 'test the [branch] option' '
 	set_fake_editor &&
 	git rebase -i F branch2 &&
 	test "$(git symbolic-ref -q HEAD)" = "refs/heads/branch2" &&
-	test $(git rev-parse I) = $(git rev-parse branch2) &&
-	test $(git rev-parse I) = $(git rev-parse HEAD)
+	test_cmp_rev I branch2 &&
+	test_cmp_rev I HEAD
 '
 
 test_expect_success 'test --onto <branch>' '
@@ -150,8 +150,8 @@ test_expect_success 'test --onto <branch>' '
 	set_fake_editor &&
 	git rebase -i --onto branch1 F &&
 	test "$(git symbolic-ref -q HEAD)" = "refs/heads/test-onto" &&
-	test $(git rev-parse HEAD^) = $(git rev-parse branch1) &&
-	test $(git rev-parse I) = $(git rev-parse branch2)
+	test_cmp_rev HEAD^ branch1 &&
+	test_cmp_rev I branch2
 '
 
 test_expect_success 'rebase on top of a non-conflicting commit' '
@@ -161,12 +161,12 @@ test_expect_success 'rebase on top of a non-conflicting commit' '
 	git rebase -i branch2 &&
 	test file6 = $(git diff --name-only original-branch1) &&
 	test "$(git symbolic-ref -q HEAD)" = "refs/heads/branch1" &&
-	test $(git rev-parse I) = $(git rev-parse branch2) &&
-	test $(git rev-parse I) = $(git rev-parse HEAD~2)
+	test_cmp_rev I branch2 &&
+	test_cmp_rev I HEAD~2
 '
 
 test_expect_success 'reflog for the branch shows state before rebase' '
-	test $(git rev-parse branch1@{1}) = $(git rev-parse original-branch1)
+	test_cmp_rev branch1@{1} original-branch1
 '
 
 test_expect_success 'exchange two commits' '
@@ -198,7 +198,7 @@ test_expect_success 'stop on conflicting pick' '
 	git tag new-branch1 &&
 	set_fake_editor &&
 	test_must_fail git rebase -i master &&
-	test "$(git rev-parse HEAD~3)" = "$(git rev-parse master)" &&
+	test_cmp_rev HEAD~3 master &&
 	test_cmp expect .git/rebase-merge/patch &&
 	test_cmp expect2 file1 &&
 	test "$(git diff --name-status |
@@ -209,7 +209,7 @@ test_expect_success 'stop on conflicting pick' '
 
 test_expect_success 'abort' '
 	git rebase --abort &&
-	test $(git rev-parse new-branch1) = $(git rev-parse HEAD) &&
+	test_cmp_rev new-branch1 HEAD &&
 	test "$(git symbolic-ref -q HEAD)" = "refs/heads/branch1" &&
 	test_path_is_missing .git/rebase-merge
 '
@@ -247,7 +247,7 @@ test_expect_success 'squash' '
 	FAKE_LINES="1 squash 2" EXPECT_HEADER_COUNT=2 \
 		git rebase -i --onto master HEAD~2 &&
 	test B = $(cat file7) &&
-	test $(git rev-parse HEAD^) = $(git rev-parse master)
+	test_cmp_rev HEAD^ master
 '
 
 test_expect_success 'retain authorship when squashing' '
@@ -306,9 +306,9 @@ test_expect_success 'preserve merges with -p' '
 	git update-index --refresh &&
 	git diff-files --quiet &&
 	git diff-index --quiet --cached HEAD -- &&
-	test $(git rev-parse HEAD~6) = $(git rev-parse branch1) &&
-	test $(git rev-parse HEAD~4^2) = $(git rev-parse to-be-preserved) &&
-	test $(git rev-parse HEAD^^2^) = $(git rev-parse HEAD^^^) &&
+	test_cmp_rev HEAD~6 branch1 &&
+	test_cmp_rev HEAD~4^2 to-be-preserved &&
+	test_cmp_rev HEAD^^2^ HEAD^^^ &&
 	test $(git show HEAD~5:file1) = B &&
 	test $(git show HEAD~3:file1) = C &&
 	test $(git show HEAD:file1) = E &&
@@ -335,7 +335,7 @@ test_expect_success '--continue tries to commit' '
 	echo resolved > file1 &&
 	git add file1 &&
 	FAKE_COMMIT_MESSAGE="chouette!" git rebase --continue &&
-	test $(git rev-parse HEAD^) = $(git rev-parse new-branch1) &&
+	test_cmp_rev HEAD^ new-branch1 &&
 	git show HEAD | grep chouette
 '
 
@@ -600,7 +600,7 @@ test_expect_success 'do "noop" when there is nothing to cherry-pick' '
 	test $(git rev-parse branch3) != $(git rev-parse branch4) &&
 	set_fake_editor &&
 	git rebase -i branch3 &&
-	test $(git rev-parse branch3) = $(git rev-parse branch4)
+	test_cmp_rev branch3 branch4
 
 '
 
@@ -660,7 +660,7 @@ test_expect_success 'rebase -i continue with unstaged submodule' '
 	test_must_fail git rebase -i submodule-base &&
 	git reset &&
 	git rebase --continue &&
-	test $(git rev-parse submodule-base) = $(git rev-parse HEAD)
+	test_cmp_rev submodule-base HEAD
 '
 
 test_expect_success 'avoid unnecessary reset' '
@@ -682,7 +682,7 @@ test_expect_success 'reword' '
 	FAKE_LINES="1 2 3 reword 4" FAKE_COMMIT_MESSAGE="E changed" git rebase -i A &&
 	git show HEAD | grep "E changed" &&
 	test $(git rev-parse master) != $(git rev-parse HEAD) &&
-	test $(git rev-parse master^) = $(git rev-parse HEAD^) &&
+	test_cmp_rev master^ HEAD^ &&
 	FAKE_LINES="1 2 reword 3 4" FAKE_COMMIT_MESSAGE="D changed" git rebase -i A &&
 	git show HEAD^ | grep "D changed" &&
 	FAKE_LINES="reword 1 2 3 4" FAKE_COMMIT_MESSAGE="B changed" git rebase -i A &&
@@ -741,7 +741,7 @@ test_expect_success 'always cherry-pick with --no-ff' '
 		git diff HEAD~$p original-no-ff-branch~$p > out &&
 		test_cmp empty out
 	done &&
-	test $(git rev-parse HEAD~3) = $(git rev-parse original-no-ff-branch~3) &&
+	test_cmp_rev HEAD~3 original-no-ff-branch~3 &&
 	git diff HEAD~3 original-no-ff-branch~3 > out &&
 	test_cmp empty out
 '
diff --git a/t/t3407-rebase-abort.sh b/t/t3407-rebase-abort.sh
index a6a6c40..b5bafe8 100755
--- a/t/t3407-rebase-abort.sh
+++ b/t/t3407-rebase-abort.sh
@@ -40,7 +40,7 @@ testrebase() {
 		test_must_fail git rebase$type master &&
 		test_path_is_dir "$dotest" &&
 		git rebase --abort &&
-		test $(git rev-parse to-rebase) = $(git rev-parse pre-rebase) &&
+		test_cmp_rev to-rebase pre-rebase &&
 		test ! -d "$dotest"
 	'
 
@@ -51,9 +51,9 @@ testrebase() {
 		test_must_fail git rebase$type master &&
 		test_path_is_dir "$dotest" &&
 		test_must_fail git rebase --skip &&
-		test $(git rev-parse HEAD) = $(git rev-parse master) &&
+		test_cmp_rev HEAD master &&
 		git rebase --abort &&
-		test $(git rev-parse to-rebase) = $(git rev-parse pre-rebase) &&
+		test_cmp_rev to-rebase pre-rebase &&
 		test ! -d "$dotest"
 	'
 
@@ -69,7 +69,7 @@ testrebase() {
 		test_must_fail git rebase --continue &&
 		test $(git rev-parse HEAD) != $(git rev-parse master) &&
 		git rebase --abort &&
-		test $(git rev-parse to-rebase) = $(git rev-parse pre-rebase) &&
+		test_cmp_rev to-rebase pre-rebase &&
 		test ! -d "$dotest"
 	'
 
diff --git a/t/t3410-rebase-preserve-dropped-merges.sh b/t/t3410-rebase-preserve-dropped-merges.sh
index 6f73b95..99518ad 100755
--- a/t/t3410-rebase-preserve-dropped-merges.sh
+++ b/t/t3410-rebase-preserve-dropped-merges.sh
@@ -51,7 +51,7 @@ test_expect_success 'skip same-resolution merges with -p' '
 	test_commit J file1 23 &&
 	test_commit K file7 file7 &&
 	git rebase -i -p L &&
-	test $(git rev-parse HEAD^^) = $(git rev-parse L) &&
+	test_cmp_rev HEAD^^ L &&
 	test "23" = "$(cat file1)" &&
 	test "I" = "$(cat file6)" &&
 	test "file7" = "$(cat file7)"
@@ -76,7 +76,7 @@ test_expect_success 'keep different-resolution merges with -p' '
 	echo 234 > file1 &&
 	git add file1 &&
 	git rebase --continue &&
-	test $(git rev-parse HEAD^^^) = $(git rev-parse L2) &&
+	test_cmp_rev HEAD^^^ L2 &&
 	test "234" = "$(cat file1)" &&
 	test "I" = "$(cat file6)" &&
 	test "file7" = "$(cat file7)"
diff --git a/t/t3411-rebase-preserve-around-merges.sh b/t/t3411-rebase-preserve-around-merges.sh
index dc81bf2..d2dc55a 100755
--- a/t/t3411-rebase-preserve-around-merges.sh
+++ b/t/t3411-rebase-preserve-around-merges.sh
@@ -38,8 +38,8 @@ test_expect_success 'setup' '
 #
 test_expect_success 'squash F1 into D1' '
 	FAKE_LINES="1 squash 4 2 3" git rebase -i -p B1 &&
-	test "$(git rev-parse HEAD^2)" = "$(git rev-parse C1)" &&
-	test "$(git rev-parse HEAD~2)" = "$(git rev-parse B1)" &&
+	test_cmp_rev HEAD^2 C1 &&
+	test_cmp_rev HEAD~2 B1 &&
 	git tag E2
 '
 
@@ -67,9 +67,9 @@ test_expect_success 'rebase two levels of merge' '
 	test_commit L1 &&
 	test_merge M1 K1 &&
 	GIT_EDITOR=: git rebase -i -p E2 &&
-	test "$(git rev-parse HEAD~3)" = "$(git rev-parse E2)" &&
-	test "$(git rev-parse HEAD~2)" = "$(git rev-parse HEAD^2^2~2)" &&
-	test "$(git rev-parse HEAD^2^1^1)" = "$(git rev-parse HEAD^2^2^1)"
+	test_cmp_rev HEAD~3 E2 &&
+	test_cmp_rev HEAD~2 HEAD^2^2~2 &&
+	test_cmp_rev HEAD^2^1^1 HEAD^2^2^1
 '
 
 test_done
diff --git a/t/t3414-rebase-preserve-onto.sh b/t/t3414-rebase-preserve-onto.sh
index ee0a6cc..5389b1a 100755
--- a/t/t3414-rebase-preserve-onto.sh
+++ b/t/t3414-rebase-preserve-onto.sh
@@ -43,8 +43,8 @@ test_expect_success 'setup' '
 test_expect_success 'rebase from B1 onto H1' '
 	git checkout G1 &&
 	git rebase -p --onto H1 B1 &&
-	test "$(git rev-parse HEAD^1^1^1)" = "$(git rev-parse H1)" &&
-	test "$(git rev-parse HEAD^2^1^1)" = "$(git rev-parse H1)"
+	test_cmp_rev HEAD^1^1^1 H1 &&
+	test_cmp_rev HEAD^2^1^1 H1
 '
 
 # On the other hand if rebase from E1 which is within one branch,
@@ -58,8 +58,8 @@ test_expect_success 'rebase from B1 onto H1' '
 test_expect_success 'rebase from E1 onto H1' '
 	git checkout G1 &&
 	git rebase -p --onto H1 E1 &&
-	test "$(git rev-parse HEAD^1^1)" = "$(git rev-parse H1)" &&
-	test "$(git rev-parse HEAD^2)" = "$(git rev-parse D1)"
+	test_cmp_rev HEAD^1^1 H1 &&
+	test_cmp_rev HEAD^2 D1
 '
 
 # And the same if we rebase from a commit in the second-parent branch.
@@ -73,8 +73,8 @@ test_expect_success 'rebase from C1 onto H1' '
 	git checkout G1 &&
 	git rev-list --first-parent --pretty=oneline C1..G1 &&
 	git rebase -p --onto H1 C1 &&
-	test "$(git rev-parse HEAD^2^1)" = "$(git rev-parse H1)" &&
-	test "$(git rev-parse HEAD^1)" = "$(git rev-parse F1)"
+	test_cmp_rev HEAD^2^1 H1 &&
+	test_cmp_rev HEAD^1 F1
 '
 
 test_done
diff --git a/t/t3501-revert-cherry-pick.sh b/t/t3501-revert-cherry-pick.sh
index 51f3bbb..53922d9 100755
--- a/t/t3501-revert-cherry-pick.sh
+++ b/t/t3501-revert-cherry-pick.sh
@@ -63,7 +63,7 @@ test_expect_success 'cherry-pick after renaming branch' '
 
 	git checkout rename2 &&
 	git cherry-pick added &&
-	test $(git rev-parse HEAD^) = $(git rev-parse rename2) &&
+	test_cmp_rev HEAD^ rename2 &&
 	test -f opos &&
 	grep "Add extra line at the end" opos &&
 	git reflog -1 | grep cherry-pick
@@ -74,7 +74,7 @@ test_expect_success 'revert after renaming branch' '
 
 	git checkout rename1 &&
 	git revert added &&
-	test $(git rev-parse HEAD^) = $(git rev-parse rename1) &&
+	test_cmp_rev HEAD^ rename1 &&
 	test -f spoo &&
 	! grep "Add extra line at the end" spoo &&
 	git reflog -1 | grep revert
diff --git a/t/t3506-cherry-pick-ff.sh b/t/t3506-cherry-pick-ff.sh
index fb889ac..5f7f964 100755
--- a/t/t3506-cherry-pick-ff.sh
+++ b/t/t3506-cherry-pick-ff.sh
@@ -24,7 +24,7 @@ test_expect_success 'cherry-pick using --ff fast forwards' '
 	git reset --hard first &&
 	test_tick &&
 	git cherry-pick --ff second &&
-	test "$(git rev-parse --verify HEAD)" = "$(git rev-parse --verify second)"
+	test_cmp_rev HEAD second
 '
 
 test_expect_success 'cherry-pick not using --ff does not fast forwards' '
@@ -80,14 +80,14 @@ test_expect_success 'cherry pick with --ff a merge (1)' '
 	git reset --hard A -- &&
 	git cherry-pick --ff -m 1 C &&
 	git diff --exit-code C &&
-	test "$(git rev-parse --verify HEAD)" = "$(git rev-parse --verify C)"
+	test_cmp_rev HEAD C
 '
 
 test_expect_success 'cherry pick with --ff a merge (2)' '
 	git reset --hard B -- &&
 	git cherry-pick --ff -m 2 C &&
 	git diff --exit-code C &&
-	test "$(git rev-parse --verify HEAD)" = "$(git rev-parse --verify C)"
+	test_cmp_rev HEAD C
 '
 
 test_expect_success 'cherry pick a merge relative to nonexistent parent with --ff should fail' '
diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh
index 2142c1f..3517543 100755
--- a/t/t3903-stash.sh
+++ b/t/t3903-stash.sh
@@ -34,7 +34,7 @@ index 0cfbf08..00750ed 100644
 EOF
 
 test_expect_success 'parents of stash' '
-	test $(git rev-parse stash^) = $(git rev-parse HEAD) &&
+	test_cmp_rev stash^ HEAD &&
 	git diff stash^2..stash > output &&
 	test_cmp output expect
 '
@@ -188,7 +188,7 @@ test_expect_success 'stash branch' '
 	git commit file -m second &&
 	git stash branch stashbranch &&
 	test refs/heads/stashbranch = $(git symbolic-ref HEAD) &&
-	test $(git rev-parse HEAD) = $(git rev-parse master^) &&
+	test_cmp_rev HEAD master^ &&
 	git diff --cached > output &&
 	test_cmp output expect &&
 	git diff > output &&
@@ -653,7 +653,7 @@ test_expect_success 'stash where working directory contains "HEAD" file' '
 	git stash &&
 	git diff-files --quiet &&
 	git diff-index --cached --quiet HEAD &&
-	test "$(git rev-parse stash^)" = "$(git rev-parse HEAD)" &&
+	test_cmp_rev stash^ HEAD &&
 	git diff stash^..stash > output &&
 	test_cmp output expect
 '
diff --git a/t/t4150-am.sh b/t/t4150-am.sh
index b41bd17..c6b0a0f 100755
--- a/t/t4150-am.sh
+++ b/t/t4150-am.sh
@@ -209,8 +209,8 @@ test_expect_success 'am applies patch correctly' '
 	git am <patch1 &&
 	test_path_is_missing .git/rebase-apply &&
 	git diff --exit-code second &&
-	test "$(git rev-parse second)" = "$(git rev-parse HEAD)" &&
-	test "$(git rev-parse second^)" = "$(git rev-parse HEAD^)"
+	test_cmp_rev second HEAD &&
+	test_cmp_rev second^ HEAD^
 '
 
 test_expect_success 'am fails if index is dirty' '
@@ -232,8 +232,8 @@ test_expect_success 'am applies patch e-mail not in a mbox' '
 	git am patch1.eml &&
 	test_path_is_missing .git/rebase-apply &&
 	git diff --exit-code second &&
-	test "$(git rev-parse second)" = "$(git rev-parse HEAD)" &&
-	test "$(git rev-parse second^)" = "$(git rev-parse HEAD^)"
+	test_cmp_rev second HEAD &&
+	test_cmp_rev second^ HEAD^
 '
 
 test_expect_success 'am applies patch e-mail not in a mbox with CRLF' '
@@ -243,8 +243,8 @@ test_expect_success 'am applies patch e-mail not in a mbox with CRLF' '
 	git am patch1-crlf.eml &&
 	test_path_is_missing .git/rebase-apply &&
 	git diff --exit-code second &&
-	test "$(git rev-parse second)" = "$(git rev-parse HEAD)" &&
-	test "$(git rev-parse second^)" = "$(git rev-parse HEAD^)"
+	test_cmp_rev second HEAD &&
+	test_cmp_rev second^ HEAD^
 '
 
 test_expect_success 'am applies patch e-mail with preceding whitespace' '
@@ -254,8 +254,8 @@ test_expect_success 'am applies patch e-mail with preceding whitespace' '
 	git am patch1-ws.eml &&
 	test_path_is_missing .git/rebase-apply &&
 	git diff --exit-code second &&
-	test "$(git rev-parse second)" = "$(git rev-parse HEAD)" &&
-	test "$(git rev-parse second^)" = "$(git rev-parse HEAD^)"
+	test_cmp_rev second HEAD &&
+	test_cmp_rev second^ HEAD^
 '
 
 test_expect_success 'am applies stgit patch' '
@@ -456,7 +456,7 @@ test_expect_success 'am changes committer and keeps author' '
 	git checkout first &&
 	git am patch2 &&
 	test_path_is_missing .git/rebase-apply &&
-	test "$(git rev-parse master^^)" = "$(git rev-parse HEAD^^)" &&
+	test_cmp_rev master^^ HEAD^^ &&
 	git diff --exit-code master..HEAD &&
 	git diff --exit-code master^..HEAD^ &&
 	compare author master HEAD &&
diff --git a/t/t5404-tracking-branches.sh b/t/t5404-tracking-branches.sh
index 2b8c0ba..7ce40c5 100755
--- a/t/t5404-tracking-branches.sh
+++ b/t/t5404-tracking-branches.sh
@@ -40,7 +40,7 @@ test_expect_success 'mixed-success push returns error' '
 '
 
 test_expect_success 'check tracking branches updated correctly after push' '
-	test "$(git rev-parse origin/master)" = "$(git rev-parse master)"
+	test_cmp_rev origin/master master
 '
 
 test_expect_success 'check tracking branches not updated for failed refs' '
diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
index dd2e6ce..0300344 100755
--- a/t/t5505-remote.sh
+++ b/t/t5505-remote.sh
@@ -727,7 +727,7 @@ test_expect_success 'rename a remote' '
 		git remote rename origin upstream &&
 		rmdir .git/refs/remotes/origin &&
 		test "$(git symbolic-ref refs/remotes/upstream/HEAD)" = "refs/remotes/upstream/master" &&
-		test "$(git rev-parse upstream/master)" = "$(git rev-parse master)" &&
+		test_cmp_rev upstream/master master &&
 		test "$(git config remote.upstream.fetch)" = "+refs/heads/*:refs/remotes/upstream/*" &&
 		test "$(git config branch.master.remote)" = "upstream"
 	)
@@ -760,7 +760,7 @@ test_expect_success 'rename a remote with name prefix of other remote' '
 		cd four.three &&
 		git remote add o git://example.com/repo.git &&
 		git remote rename o upstream &&
-		test "$(git rev-parse origin/master)" = "$(git rev-parse master)"
+		test_cmp_rev origin/master master
 	)
 '
 
diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
index c952d5e..b8c0f46 100755
--- a/t/t5520-pull.sh
+++ b/t/t5520-pull.sh
@@ -209,7 +209,7 @@ test_expect_success 'fast-forwards working tree if branch head is updated' '
 	git pull . second:third 2>err &&
 	test_i18ngrep "fetch updated the current branch head" err &&
 	test "$(cat file)" = modified &&
-	test "$(git rev-parse third)" = "$(git rev-parse second)"
+	test_cmp_rev third second
 '
 
 test_expect_success 'fast-forward fails with conflicting work tree' '
@@ -220,7 +220,7 @@ test_expect_success 'fast-forward fails with conflicting work tree' '
 	test_must_fail git pull . second:third 2>err &&
 	test_i18ngrep "Cannot fast-forward your working tree" err &&
 	test "$(cat file)" = conflict &&
-	test "$(git rev-parse third)" = "$(git rev-parse second)"
+	test_cmp_rev third second
 '
 
 test_expect_success '--rebase' '
@@ -233,14 +233,14 @@ test_expect_success '--rebase' '
 	git commit -m "new file" &&
 	git tag before-rebase &&
 	git pull --rebase . copy &&
-	test "$(git rev-parse HEAD^)" = "$(git rev-parse copy)" &&
+	test_cmp_rev HEAD^ copy &&
 	test new = "$(git show HEAD:file2)"
 '
 
 test_expect_success '--rebase fails with multiple branches' '
 	git reset --hard before-rebase &&
 	test_must_fail git pull --rebase . copy master 2>err &&
-	test "$(git rev-parse HEAD)" = "$(git rev-parse before-rebase)" &&
+	test_cmp_rev HEAD before-rebase &&
 	test_i18ngrep "Cannot rebase onto multiple branches" err &&
 	test modified = "$(git show HEAD:file)"
 '
@@ -260,7 +260,7 @@ test_expect_success 'pull.rebase' '
 	git reset --hard before-rebase &&
 	test_config pull.rebase true &&
 	git pull . copy &&
-	test "$(git rev-parse HEAD^)" = "$(git rev-parse copy)" &&
+	test_cmp_rev HEAD^ copy &&
 	test new = "$(git show HEAD:file2)"
 '
 
@@ -268,7 +268,7 @@ test_expect_success 'branch.to-rebase.rebase' '
 	git reset --hard before-rebase &&
 	test_config branch.to-rebase.rebase true &&
 	git pull . copy &&
-	test "$(git rev-parse HEAD^)" = "$(git rev-parse copy)" &&
+	test_cmp_rev HEAD^ copy &&
 	test new = "$(git show HEAD:file2)"
 '
 
@@ -297,8 +297,8 @@ test_expect_success 'pull.rebase=false create a new merge commit' '
 	git reset --hard before-preserve-rebase &&
 	test_config pull.rebase false &&
 	git pull . copy &&
-	test "$(git rev-parse HEAD^1)" = "$(git rev-parse before-preserve-rebase)" &&
-	test "$(git rev-parse HEAD^2)" = "$(git rev-parse copy)" &&
+	test_cmp_rev HEAD^1 before-preserve-rebase &&
+	test_cmp_rev HEAD^2 copy &&
 	test file3 = "$(git show HEAD:file3.t)"
 '
 
@@ -306,7 +306,7 @@ test_expect_success 'pull.rebase=true flattens keep-merge' '
 	git reset --hard before-preserve-rebase &&
 	test_config pull.rebase true &&
 	git pull . copy &&
-	test "$(git rev-parse HEAD^^)" = "$(git rev-parse copy)" &&
+	test_cmp_rev HEAD^^ copy &&
 	test file3 = "$(git show HEAD:file3.t)"
 '
 
@@ -314,7 +314,7 @@ test_expect_success 'pull.rebase=1 is treated as true and flattens keep-merge' '
 	git reset --hard before-preserve-rebase &&
 	test_config pull.rebase 1 &&
 	git pull . copy &&
-	test "$(git rev-parse HEAD^^)" = "$(git rev-parse copy)" &&
+	test_cmp_rev HEAD^^ copy &&
 	test file3 = "$(git show HEAD:file3.t)"
 '
 
@@ -322,8 +322,8 @@ test_expect_success 'pull.rebase=preserve rebases and merges keep-merge' '
 	git reset --hard before-preserve-rebase &&
 	test_config pull.rebase preserve &&
 	git pull . copy &&
-	test "$(git rev-parse HEAD^^)" = "$(git rev-parse copy)" &&
-	test "$(git rev-parse HEAD^2)" = "$(git rev-parse keep-merge)"
+	test_cmp_rev HEAD^^ copy &&
+	test_cmp_rev HEAD^2 keep-merge
 '
 
 test_expect_success 'pull.rebase=interactive' '
@@ -346,8 +346,8 @@ test_expect_success '--rebase=false create a new merge commit' '
 	git reset --hard before-preserve-rebase &&
 	test_config pull.rebase true &&
 	git pull --rebase=false . copy &&
-	test "$(git rev-parse HEAD^1)" = "$(git rev-parse before-preserve-rebase)" &&
-	test "$(git rev-parse HEAD^2)" = "$(git rev-parse copy)" &&
+	test_cmp_rev HEAD^1 before-preserve-rebase &&
+	test_cmp_rev HEAD^2 copy &&
 	test file3 = "$(git show HEAD:file3.t)"
 '
 
@@ -355,7 +355,7 @@ test_expect_success '--rebase=true rebases and flattens keep-merge' '
 	git reset --hard before-preserve-rebase &&
 	test_config pull.rebase preserve &&
 	git pull --rebase=true . copy &&
-	test "$(git rev-parse HEAD^^)" = "$(git rev-parse copy)" &&
+	test_cmp_rev HEAD^^ copy &&
 	test file3 = "$(git show HEAD:file3.t)"
 '
 
@@ -363,8 +363,8 @@ test_expect_success '--rebase=preserve rebases and merges keep-merge' '
 	git reset --hard before-preserve-rebase &&
 	test_config pull.rebase true &&
 	git pull --rebase=preserve . copy &&
-	test "$(git rev-parse HEAD^^)" = "$(git rev-parse copy)" &&
-	test "$(git rev-parse HEAD^2)" = "$(git rev-parse keep-merge)"
+	test_cmp_rev HEAD^^ copy &&
+	test_cmp_rev HEAD^2 keep-merge
 '
 
 test_expect_success '--rebase=invalid fails' '
@@ -376,7 +376,7 @@ test_expect_success '--rebase overrides pull.rebase=preserve and flattens keep-m
 	git reset --hard before-preserve-rebase &&
 	test_config pull.rebase preserve &&
 	git pull --rebase . copy &&
-	test "$(git rev-parse HEAD^^)" = "$(git rev-parse copy)" &&
+	test_cmp_rev HEAD^^ copy &&
 	test file3 = "$(git show HEAD:file3.t)"
 '
 
diff --git a/t/t6022-merge-rename.sh b/t/t6022-merge-rename.sh
index 05ebba7..4e31f6a 100755
--- a/t/t6022-merge-rename.sh
+++ b/t/t6022-merge-rename.sh
@@ -788,7 +788,7 @@ test_expect_success 'merge rename + small change' '
 
 	test 1 -eq $(git ls-files -s | wc -l) &&
 	test 0 -eq $(git ls-files -o | wc -l) &&
-	test $(git rev-parse HEAD:renamed_file) = $(git rev-parse HEAD~1:file)
+	test_cmp_rev HEAD:renamed_file HEAD~1:file
 '
 
 test_expect_success 'setup for use of extended merge markers' '
diff --git a/t/t6030-bisect-porcelain.sh b/t/t6030-bisect-porcelain.sh
index e74662b..05bc639 100755
--- a/t/t6030-bisect-porcelain.sh
+++ b/t/t6030-bisect-porcelain.sh
@@ -335,16 +335,16 @@ test_expect_success 'bisect skip only one range' '
 	git bisect reset &&
 	git bisect start $HASH7 $HASH1 &&
 	git bisect skip $HASH1..$HASH5 &&
-	test "$HASH6" = "$(git rev-parse --verify HEAD)" &&
+	test_cmp_rev HEAD $HASH6 &&
 	test_must_fail git bisect bad > my_bisect_log.txt &&
 	grep "first bad commit could be any of" my_bisect_log.txt
 '
 
 test_expect_success 'bisect skip many ranges' '
 	git bisect start $HASH7 $HASH1 &&
-	test "$HASH4" = "$(git rev-parse --verify HEAD)" &&
+	test_cmp_rev HEAD $HASH4 &&
 	git bisect skip $HASH2 $HASH2.. ..$HASH5 &&
-	test "$HASH6" = "$(git rev-parse --verify HEAD)" &&
+	test_cmp_rev HEAD $HASH6 &&
 	test_must_fail git bisect bad > my_bisect_log.txt &&
 	grep "first bad commit could be any of" my_bisect_log.txt
 '
@@ -356,7 +356,7 @@ test_expect_success 'bisect starting with a detached HEAD' '
 	git bisect start &&
 	test $HEAD = $(cat .git/BISECT_START) &&
 	git bisect reset &&
-	test $HEAD = $(git rev-parse --verify HEAD)
+	test_cmp_rev "$HEAD" HEAD
 '
 
 test_expect_success 'bisect errors out if bad and good are mistaken' '
@@ -370,18 +370,15 @@ test_expect_success 'bisect does not create a "bisect" branch' '
 	git bisect reset &&
 	git bisect start $HASH7 $HASH1 &&
 	git branch bisect &&
-	rev_hash4=$(git rev-parse --verify HEAD) &&
-	test "$rev_hash4" = "$HASH4" &&
+	test_cmp_rev HEAD $HASH4 &&
 	git branch -D bisect &&
 	git bisect good &&
 	git branch bisect &&
-	rev_hash6=$(git rev-parse --verify HEAD) &&
-	test "$rev_hash6" = "$HASH6" &&
+	test_cmp_rev HEAD $HASH6 &&
 	git bisect good > my_bisect_log.txt &&
 	grep "$HASH7 is the first bad commit" my_bisect_log.txt &&
 	git bisect reset &&
-	rev_hash6=$(git rev-parse --verify bisect) &&
-	test "$rev_hash6" = "$HASH6" &&
+	test_cmp_rev bisect $HASH6 &&
 	git branch -D bisect
 '
 
@@ -481,7 +478,7 @@ test_expect_success 'optimized merge base checks' '
 	grep "$HASH4" my_bisect_log.txt &&
 	git bisect good > my_bisect_log2.txt &&
 	test -f ".git/BISECT_ANCESTORS_OK" &&
-	test "$HASH6" = $(git rev-parse --verify HEAD) &&
+	test_cmp_rev HEAD $HASH6 &&
 	git bisect bad > my_bisect_log3.txt &&
 	git bisect good "$A_HASH" > my_bisect_log4.txt &&
 	grep "merge base must be tested" my_bisect_log4.txt &&
@@ -524,8 +521,7 @@ test_expect_success '"parallel" side branch creation' '
 test_expect_success 'restricting bisection on one dir' '
 	git bisect reset &&
 	git bisect start HEAD $HASH1 -- dir1 &&
-	para1=$(git rev-parse --verify HEAD) &&
-	test "$para1" = "$PARA_HASH1" &&
+	test_cmp_rev HEAD "$PARA_HASH1" &&
 	git bisect bad > my_bisect_log.txt &&
 	grep "$PARA_HASH1 is the first bad commit" my_bisect_log.txt
 '
@@ -533,31 +529,24 @@ test_expect_success 'restricting bisection on one dir' '
 test_expect_success 'restricting bisection on one dir and a file' '
 	git bisect reset &&
 	git bisect start HEAD $HASH1 -- dir1 hello &&
-	para4=$(git rev-parse --verify HEAD) &&
-	test "$para4" = "$PARA_HASH4" &&
+	test_cmp_rev HEAD "$PARA_HASH4" &&
 	git bisect bad &&
-	hash3=$(git rev-parse --verify HEAD) &&
-	test "$hash3" = "$HASH3" &&
+	test_cmp_rev HEAD $HASH3 &&
 	git bisect good &&
-	hash4=$(git rev-parse --verify HEAD) &&
-	test "$hash4" = "$HASH4" &&
+	test_cmp_rev HEAD $HASH4 &&
 	git bisect good &&
-	para1=$(git rev-parse --verify HEAD) &&
-	test "$para1" = "$PARA_HASH1" &&
+	test_cmp_rev HEAD "$PARA_HASH1" &&
 	git bisect good > my_bisect_log.txt &&
 	grep "$PARA_HASH4 is the first bad commit" my_bisect_log.txt
 '
 
 test_expect_success 'skipping away from skipped commit' '
 	git bisect start $PARA_HASH7 $HASH1 &&
-	para4=$(git rev-parse --verify HEAD) &&
-	test "$para4" = "$PARA_HASH4" &&
-        git bisect skip &&
-	hash7=$(git rev-parse --verify HEAD) &&
-	test "$hash7" = "$HASH7" &&
-        git bisect skip &&
-	para3=$(git rev-parse --verify HEAD) &&
-	test "$para3" = "$PARA_HASH3"
+	test_cmp_rev HEAD "$PARA_HASH4" &&
+	git bisect skip &&
+	test_cmp_rev HEAD $HASH7 &&
+	git bisect skip &&
+	test_cmp_rev HEAD "$PARA_HASH3"
 '
 
 test_expect_success 'erroring out when using bad path parameters' '
@@ -644,56 +633,50 @@ test_expect_success 'bisect fails if tree is broken on trial commit' '
 	test_cmp expected.missing-tree.default error.txt
 '
 
-check_same()
-{
-	echo "Checking $1 is the same as $2" &&
-	test_cmp_rev "$1" "$2"
-}
-
 test_expect_success 'bisect: --no-checkout - start commit bad' '
 	git bisect reset &&
 	git bisect start BROKEN_HASH7 BROKEN_HASH4 --no-checkout &&
-	check_same BROKEN_HASH6 BISECT_HEAD &&
+	test_cmp_rev BISECT_HEAD BROKEN_HASH6 &&
 	git bisect reset
 '
 
 test_expect_success 'bisect: --no-checkout - trial commit bad' '
 	git bisect reset &&
 	git bisect start broken BROKEN_HASH4 --no-checkout &&
-	check_same BROKEN_HASH6 BISECT_HEAD &&
+	test_cmp_rev BISECT_HEAD BROKEN_HASH6 &&
 	git bisect reset
 '
 
 test_expect_success 'bisect: --no-checkout - target before breakage' '
 	git bisect reset &&
 	git bisect start broken BROKEN_HASH4 --no-checkout &&
-	check_same BROKEN_HASH6 BISECT_HEAD &&
+	test_cmp_rev BISECT_HEAD BROKEN_HASH6 &&
 	git bisect bad BISECT_HEAD &&
-	check_same BROKEN_HASH5 BISECT_HEAD &&
+	test_cmp_rev BISECT_HEAD BROKEN_HASH5 &&
 	git bisect bad BISECT_HEAD &&
-	check_same BROKEN_HASH5 bisect/bad &&
+	test_cmp_rev bisect/bad BROKEN_HASH5 &&
 	git bisect reset
 '
 
 test_expect_success 'bisect: --no-checkout - target in breakage' '
 	git bisect reset &&
 	git bisect start broken BROKEN_HASH4 --no-checkout &&
-	check_same BROKEN_HASH6 BISECT_HEAD &&
+	test_cmp_rev BISECT_HEAD BROKEN_HASH6 &&
 	git bisect bad BISECT_HEAD &&
-	check_same BROKEN_HASH5 BISECT_HEAD &&
+	test_cmp_rev BISECT_HEAD BROKEN_HASH5 &&
 	git bisect good BISECT_HEAD &&
-	check_same BROKEN_HASH6 bisect/bad &&
+	test_cmp_rev bisect/bad BROKEN_HASH6 &&
 	git bisect reset
 '
 
 test_expect_success 'bisect: --no-checkout - target after breakage' '
 	git bisect reset &&
 	git bisect start broken BROKEN_HASH4 --no-checkout &&
-	check_same BROKEN_HASH6 BISECT_HEAD &&
+	test_cmp_rev BISECT_HEAD BROKEN_HASH6 &&
 	git bisect good BISECT_HEAD &&
-	check_same BROKEN_HASH8 BISECT_HEAD &&
+	test_cmp_rev BISECT_HEAD BROKEN_HASH8 &&
 	git bisect good BISECT_HEAD &&
-	check_same BROKEN_HASH9 bisect/bad &&
+	test_cmp_rev bisect/bad BROKEN_HASH9 &&
 	git bisect reset
 '
 
@@ -708,7 +691,7 @@ test_expect_success 'bisect: demonstrate identification of damage boundary' "
 		rc=\$?
 		rm -f tmp.\$\$
 		test \$rc = 0' &&
-	check_same BROKEN_HASH6 bisect/bad &&
+	test_cmp_rev bisect/bad BROKEN_HASH6 &&
 	git bisect reset
 "
 
@@ -755,7 +738,7 @@ test_expect_success '"git bisect bad HEAD" behaves as "git bisect bad"' '
 	git bisect start HEAD $HASH1 &&
 	git bisect good HEAD &&
 	git bisect bad HEAD &&
-	test "$HASH6" = $(git rev-parse --verify HEAD) &&
+	test_cmp_rev HEAD $HASH6 &&
 	git bisect reset
 '
 
diff --git a/t/t6036-recursive-corner-cases.sh b/t/t6036-recursive-corner-cases.sh
index 9d6621c..dd1be5d 100755
--- a/t/t6036-recursive-corner-cases.sh
+++ b/t/t6036-recursive-corner-cases.sh
@@ -61,8 +61,8 @@ test_expect_success 'merge simple rename+criss-cross with no modifications' '
 	test 2 = $(git ls-files -u | wc -l) &&
 	test 2 = $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse :2:three) = $(git rev-parse L2:three) &&
-	test $(git rev-parse :3:three) = $(git rev-parse R2:three) &&
+	test_cmp_rev :2:three L2:three &&
+	test_cmp_rev :3:three R2:three &&
 
 	test $(git rev-parse L2:three) = $(git hash-object three~HEAD) &&
 	test $(git rev-parse R2:three) = $(git hash-object three~R2^0)
@@ -128,8 +128,8 @@ test_expect_success 'merge criss-cross + rename merges with basic modification'
 	test 2 = $(git ls-files -u | wc -l) &&
 	test 2 = $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse :2:three) = $(git rev-parse L2:three) &&
-	test $(git rev-parse :3:three) = $(git rev-parse R2:three) &&
+	test_cmp_rev :2:three L2:three &&
+	test_cmp_rev :3:three R2:three &&
 
 	test $(git rev-parse L2:three) = $(git hash-object three~HEAD) &&
 	test $(git rev-parse R2:three) = $(git hash-object three~R2^0)
@@ -201,8 +201,8 @@ test_expect_success 'git detects differently handled merges conflict' '
 	test 3 = $(git ls-files -u | wc -l) &&
 	test 0 = $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse :2:new_a) = $(git rev-parse D:new_a) &&
-	test $(git rev-parse :3:new_a) = $(git rev-parse E:new_a) &&
+	test_cmp_rev :2:new_a D:new_a &&
+	test_cmp_rev :3:new_a E:new_a &&
 
 	git cat-file -p B:new_a >>merged &&
 	git cat-file -p C:new_a >>merge-me &&
@@ -281,8 +281,8 @@ test_expect_success 'git detects conflict merging criss-cross+modify/delete' '
 	test 2 -eq $(git ls-files -s | wc -l) &&
 	test 2 -eq $(git ls-files -u | wc -l) &&
 
-	test $(git rev-parse :1:file) = $(git rev-parse master:file) &&
-	test $(git rev-parse :2:file) = $(git rev-parse B:file)
+	test_cmp_rev :1:file master:file &&
+	test_cmp_rev :2:file B:file
 '
 
 test_expect_success 'git detects conflict merging criss-cross+modify/delete, reverse direction' '
@@ -294,8 +294,8 @@ test_expect_success 'git detects conflict merging criss-cross+modify/delete, rev
 	test 2 -eq $(git ls-files -s | wc -l) &&
 	test 2 -eq $(git ls-files -u | wc -l) &&
 
-	test $(git rev-parse :1:file) = $(git rev-parse master:file) &&
-	test $(git rev-parse :3:file) = $(git rev-parse B:file)
+	test_cmp_rev :1:file master:file &&
+	test_cmp_rev :3:file B:file
 '
 
 #
@@ -377,8 +377,8 @@ test_expect_failure 'git detects conflict w/ criss-cross+contrived resolution' '
 	test 3 -eq $(git ls-files -u | wc -l) &&
 	test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse :2:file) = $(git rev-parse D:file) &&
-	test $(git rev-parse :3:file) = $(git rev-parse E:file)
+	test_cmp_rev :2:file D:file &&
+	test_cmp_rev :3:file E:file
 '
 
 #
@@ -483,8 +483,8 @@ test_expect_success 'merge of D & E1 fails but has appropriate contents' '
 	test 1 -eq $(git ls-files -u | wc -l) &&
 	test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
-	test $(git rev-parse :2:a) = $(git rev-parse B:a)
+	test_cmp_rev :0:ignore-me A:ignore-me &&
+	test_cmp_rev :2:a B:a
 '
 
 test_expect_success 'merge of E1 & D fails but has appropriate contents' '
@@ -496,8 +496,8 @@ test_expect_success 'merge of E1 & D fails but has appropriate contents' '
 	test 1 -eq $(git ls-files -u | wc -l) &&
 	test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
-	test $(git rev-parse :3:a) = $(git rev-parse B:a)
+	test_cmp_rev :0:ignore-me A:ignore-me &&
+	test_cmp_rev :3:a B:a
 '
 
 test_expect_success 'merge of D & E2 fails but has appropriate contents' '
@@ -509,10 +509,10 @@ test_expect_success 'merge of D & E2 fails but has appropriate contents' '
 	test 3 -eq $(git ls-files -u | wc -l) &&
 	test 1 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse :2:a) = $(git rev-parse B:a) &&
-	test $(git rev-parse :3:a/file) = $(git rev-parse E2:a/file) &&
-	test $(git rev-parse :1:a/file) = $(git rev-parse C:a/file) &&
-	test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
+	test_cmp_rev :2:a B:a &&
+	test_cmp_rev :3:a/file E2:a/file &&
+	test_cmp_rev :1:a/file C:a/file &&
+	test_cmp_rev :0:ignore-me A:ignore-me &&
 
 	test -f a~HEAD
 '
@@ -526,10 +526,10 @@ test_expect_success 'merge of E2 & D fails but has appropriate contents' '
 	test 3 -eq $(git ls-files -u | wc -l) &&
 	test 1 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse :3:a) = $(git rev-parse B:a) &&
-	test $(git rev-parse :2:a/file) = $(git rev-parse E2:a/file) &&
-	test $(git rev-parse :1:a/file) = $(git rev-parse C:a/file) &&
-	test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
+	test_cmp_rev :3:a B:a &&
+	test_cmp_rev :2:a/file E2:a/file &&
+	test_cmp_rev :1:a/file C:a/file &&
+	test_cmp_rev :0:ignore-me A:ignore-me &&
 
 	test -f a~D^0
 '
@@ -619,7 +619,7 @@ test_expect_success 'handle rename/rename(1to2)/modify followed by what looks li
 	test 0 -eq $(git ls-files -u | wc -l) &&
 	test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse HEAD:newname) = $(git rev-parse E:newname)
+	test_cmp_rev HEAD:newname E:newname
 '
 
 #
@@ -694,8 +694,8 @@ test_expect_failure 'detect rename/rename/add-source for virtual merge-base' '
 	test 0 -eq $(git ls-files -u | wc -l) &&
 	test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&
-	test $(git rev-parse HEAD:c) = $(git rev-parse A:a) &&
+	test_cmp_rev HEAD:b A:a &&
+	test_cmp_rev HEAD:c A:a &&
 	test "$(cat a)" = "$(printf "1\n2\n3\n4\n5\n6\n7\n8\n")"
 '
 
@@ -764,8 +764,8 @@ test_expect_success 'virtual merge base handles rename/rename(1to2)/add-dest' '
 	test 0 -eq $(git ls-files -u | wc -l) &&
 	test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse HEAD:a) = $(git rev-parse A:a) &&
-	test $(git rev-parse HEAD:c) = $(git rev-parse E:c)
+	test_cmp_rev HEAD:a A:a &&
+	test_cmp_rev HEAD:c E:c
 '
 
 test_done
diff --git a/t/t6042-merge-rename-corner-cases.sh b/t/t6042-merge-rename-corner-cases.sh
index 411550d..9aac880 100755
--- a/t/t6042-merge-rename-corner-cases.sh
+++ b/t/t6042-merge-rename-corner-cases.sh
@@ -68,8 +68,8 @@ test_expect_failure 'rename/modify/add-source conflict resolvable' '
 
 	git merge -s recursive C^0 &&
 
-	test $(git rev-parse B:a) = $(git rev-parse b) &&
-	test $(git rev-parse C:a) = $(git rev-parse a)
+	test_cmp_rev B:a b &&
+	test_cmp_rev C:a a
 '
 
 test_expect_success 'setup resolvable conflict missed if rename missed' '
@@ -105,8 +105,8 @@ test_expect_failure 'conflict caused if rename not detected' '
 	test 0 -eq $(git ls-files -o | wc -l) &&
 
 	test_line_count = 6 c &&
-	test $(git rev-parse HEAD:a) = $(git rev-parse B:a) &&
-	test $(git rev-parse HEAD:b) = $(git rev-parse A:b)
+	test_cmp_rev HEAD:a B:a &&
+	test_cmp_rev HEAD:b A:b
 '
 
 test_expect_success 'setup conflict resolved wrong if rename missed' '
@@ -178,8 +178,8 @@ test_expect_failure 'detect rename/add-source and preserve all data' '
 	test -f a &&
 	test -f b &&
 
-	test $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&
-	test $(git rev-parse HEAD:a) = $(git rev-parse C:a)
+	test_cmp_rev HEAD:b A:a &&
+	test_cmp_rev HEAD:a C:a
 '
 
 test_expect_failure 'detect rename/add-source and preserve all data, merge other way' '
@@ -194,8 +194,8 @@ test_expect_failure 'detect rename/add-source and preserve all data, merge other
 	test -f a &&
 	test -f b &&
 
-	test $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&
-	test $(git rev-parse HEAD:a) = $(git rev-parse C:a)
+	test_cmp_rev HEAD:b A:a &&
+	test_cmp_rev HEAD:a C:a
 '
 
 test_expect_success 'setup content merge + rename/directory conflict' '
@@ -281,9 +281,9 @@ test_expect_success 'rename/directory conflict + content merge conflict' '
 		left base right &&
 	test_cmp left newfile~HEAD &&
 
-	test $(git rev-parse :1:newfile) = $(git rev-parse base:file) &&
-	test $(git rev-parse :2:newfile) = $(git rev-parse left-conflict:newfile) &&
-	test $(git rev-parse :3:newfile) = $(git rev-parse right:file) &&
+	test_cmp_rev :1:newfile base:file &&
+	test_cmp_rev :2:newfile left-conflict:newfile &&
+	test_cmp_rev :3:newfile right:file &&
 
 	test -f newfile/realfile &&
 	test -f newfile~HEAD
@@ -432,9 +432,9 @@ test_expect_success 'merge has correct working tree contents' '
 	test 3 -eq $(git ls-files -u | wc -l) &&
 	test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse :1:a) = $(git rev-parse A:a) &&
-	test $(git rev-parse :3:b) = $(git rev-parse A:a) &&
-	test $(git rev-parse :2:c) = $(git rev-parse A:a) &&
+	test_cmp_rev :1:a A:a &&
+	test_cmp_rev :3:b A:a &&
+	test_cmp_rev :2:c A:a &&
 
 	test ! -f a &&
 	test $(git hash-object b) = $(git rev-parse A:a) &&
@@ -478,10 +478,10 @@ test_expect_failure 'detect conflict with rename/rename(1to2)/add-source merge'
 	test 4 -eq $(git ls-files -s | wc -l) &&
 	test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse 3:a) = $(git rev-parse C:a) &&
-	test $(git rev-parse 1:a) = $(git rev-parse A:a) &&
-	test $(git rev-parse 2:b) = $(git rev-parse B:b) &&
-	test $(git rev-parse 3:c) = $(git rev-parse C:c) &&
+	test_cmp_rev 3:a C:a &&
+	test_cmp_rev 1:a A:a &&
+	test_cmp_rev 2:b B:b &&
+	test_cmp_rev 3:c C:c &&
 
 	test -f a &&
 	test -f b &&
@@ -520,8 +520,8 @@ test_expect_failure 'rename/rename/add-source still tracks new a file' '
 	test 2 -eq $(git ls-files -s | wc -l) &&
 	test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse HEAD:a) = $(git rev-parse C:a) &&
-	test $(git rev-parse HEAD:b) = $(git rev-parse A:a)
+	test_cmp_rev HEAD:a C:a &&
+	test_cmp_rev HEAD:b A:a
 '
 
 test_expect_success 'setup rename/rename(1to2)/add-dest conflict' '
@@ -560,11 +560,11 @@ test_expect_success 'rename/rename/add-dest merge still knows about conflicting
 	test 2 -eq $(git ls-files -u c | wc -l) &&
 	test 4 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse :1:a) = $(git rev-parse A:a) &&
-	test $(git rev-parse :2:b) = $(git rev-parse C:b) &&
-	test $(git rev-parse :3:b) = $(git rev-parse B:b) &&
-	test $(git rev-parse :2:c) = $(git rev-parse C:c) &&
-	test $(git rev-parse :3:c) = $(git rev-parse B:c) &&
+	test_cmp_rev :1:a A:a &&
+	test_cmp_rev :2:b C:b &&
+	test_cmp_rev :3:b B:b &&
+	test_cmp_rev :2:c C:c &&
+	test_cmp_rev :3:c B:c &&
 
 	test $(git hash-object c~HEAD) = $(git rev-parse C:c) &&
 	test $(git hash-object c~B\^0) = $(git rev-parse B:c) &&
diff --git a/t/t7003-filter-branch.sh b/t/t7003-filter-branch.sh
index cb8fbd8..72511de 100755
--- a/t/t7003-filter-branch.sh
+++ b/t/t7003-filter-branch.sh
@@ -354,8 +354,8 @@ test_expect_success '--remap-to-ancestor with filename filters' '
 	git filter-branch -f --remap-to-ancestor \
 		moved-foo moved-bar A..master \
 		-- -- foo &&
-	test $(git rev-parse moved-foo) = $(git rev-parse moved-bar) &&
-	test $(git rev-parse moved-foo) = $(git rev-parse master^) &&
+	test_cmp_rev moved-foo moved-bar &&
+	test_cmp_rev moved-foo master^ &&
 	test $orig_invariant = $(git rev-parse invariant)
 '
 
@@ -372,8 +372,8 @@ test_expect_success 'automatic remapping to ancestor with filename filters' '
 	git filter-branch -f \
 		moved-foo2 moved-bar2 A..master \
 		-- -- foo &&
-	test $(git rev-parse moved-foo2) = $(git rev-parse moved-bar2) &&
-	test $(git rev-parse moved-foo2) = $(git rev-parse master^) &&
+	test_cmp_rev moved-foo2 moved-bar2 &&
+	test_cmp_rev moved-foo2 master^ &&
 	test $orig_invariant = $(git rev-parse invariant2)
 '
 
diff --git a/t/t7004-tag.sh b/t/t7004-tag.sh
index f9b7d79..cd65715 100755
--- a/t/t7004-tag.sh
+++ b/t/t7004-tag.sh
@@ -337,7 +337,7 @@ test_expect_success \
 	'a non-annotated tag created without parameters should point to HEAD' '
 	git tag non-annotated-tag &&
 	test $(git cat-file -t non-annotated-tag) = commit &&
-	test $(git rev-parse non-annotated-tag) = $(git rev-parse HEAD)
+	test_cmp_rev non-annotated-tag HEAD
 '
 
 test_expect_success 'trying to verify an unknown tag should fail' \
diff --git a/t/t7110-reset-merge.sh b/t/t7110-reset-merge.sh
index a82a07a..2373684 100755
--- a/t/t7110-reset-merge.sh
+++ b/t/t7110-reset-merge.sh
@@ -31,7 +31,7 @@ test_expect_success 'reset --merge is ok with changes in file it does not touch'
     git reset --merge HEAD^ &&
     ! grep 4 file1 &&
     grep 4 file2 &&
-    test "$(git rev-parse HEAD)" = "$(git rev-parse initial)" &&
+    test_cmp_rev HEAD initial &&
     test -z "$(git diff --cached)"
 '
 
@@ -39,7 +39,7 @@ test_expect_success 'reset --merge is ok when switching back' '
     git reset --merge second &&
     grep 4 file1 &&
     grep 4 file2 &&
-    test "$(git rev-parse HEAD)" = "$(git rev-parse second)" &&
+    test_cmp_rev HEAD second &&
     test -z "$(git diff --cached)"
 '
 
@@ -55,7 +55,7 @@ test_expect_success 'reset --keep is ok with changes in file it does not touch'
     git reset --keep HEAD^ &&
     ! grep 4 file1 &&
     grep 4 file2 &&
-    test "$(git rev-parse HEAD)" = "$(git rev-parse initial)" &&
+    test_cmp_rev HEAD initial &&
     test -z "$(git diff --cached)"
 '
 
@@ -63,7 +63,7 @@ test_expect_success 'reset --keep is ok when switching back' '
     git reset --keep second &&
     grep 4 file1 &&
     grep 4 file2 &&
-    test "$(git rev-parse HEAD)" = "$(git rev-parse second)" &&
+    test_cmp_rev HEAD second &&
     test -z "$(git diff --cached)"
 '
 
@@ -82,7 +82,7 @@ test_expect_success 'reset --merge discards changes added to index (1)' '
     ! grep 4 file1 &&
     ! grep 5 file1 &&
     grep 4 file2 &&
-    test "$(git rev-parse HEAD)" = "$(git rev-parse initial)" &&
+    test_cmp_rev HEAD initial &&
     test -z "$(git diff --cached)"
 '
 
@@ -94,7 +94,7 @@ test_expect_success 'reset --merge is ok again when switching back (1)' '
     ! grep 4 file2 &&
     ! grep 5 file1 &&
     grep 4 file1 &&
-    test "$(git rev-parse HEAD)" = "$(git rev-parse second)" &&
+    test_cmp_rev HEAD second &&
     test -z "$(git diff --cached)"
 '
 
@@ -122,7 +122,7 @@ test_expect_success 'reset --merge discards changes added to index (2)' '
     git add file2 &&
     git reset --merge HEAD^ &&
     ! grep 4 file2 &&
-    test "$(git rev-parse HEAD)" = "$(git rev-parse initial)" &&
+    test_cmp_rev HEAD initial &&
     test -z "$(git diff)" &&
     test -z "$(git diff --cached)"
 '
@@ -132,7 +132,7 @@ test_expect_success 'reset --merge is ok again when switching back (2)' '
     git reset --merge second &&
     ! grep 4 file2 &&
     grep 4 file1 &&
-    test "$(git rev-parse HEAD)" = "$(git rev-parse second)" &&
+    test_cmp_rev HEAD second &&
     test -z "$(git diff --cached)"
 '
 
@@ -148,7 +148,7 @@ test_expect_success 'reset --keep keeps changes it does not touch' '
     git add file2 &&
     git reset --keep HEAD^ &&
     grep 4 file2 &&
-    test "$(git rev-parse HEAD)" = "$(git rev-parse initial)" &&
+    test_cmp_rev HEAD initial &&
     test -z "$(git diff --cached)"
 '
 
@@ -156,7 +156,7 @@ test_expect_success 'reset --keep keeps changes when switching back' '
     git reset --keep second &&
     grep 4 file2 &&
     grep 4 file1 &&
-    test "$(git rev-parse HEAD)" = "$(git rev-parse second)" &&
+    test_cmp_rev HEAD second &&
     test -z "$(git diff --cached)"
 '
 
@@ -223,7 +223,7 @@ test_expect_success '"reset --merge HEAD^" is ok with pending merge' '
     git checkout third &&
     test_must_fail git merge branch1 &&
     git reset --merge HEAD^ &&
-    test "$(git rev-parse HEAD)" = "$(git rev-parse second)" &&
+    test_cmp_rev HEAD second &&
     test -z "$(git diff --cached)" &&
     test -z "$(git diff)"
 '
@@ -249,7 +249,7 @@ test_expect_success '"reset --merge HEAD" is ok with pending merge' '
     git reset --hard third &&
     test_must_fail git merge branch1 &&
     git reset --merge HEAD &&
-    test "$(git rev-parse HEAD)" = "$(git rev-parse third)" &&
+    test_cmp_rev HEAD third &&
     test -z "$(git diff --cached)" &&
     test -z "$(git diff)"
 '
diff --git a/t/t7201-co.sh b/t/t7201-co.sh
index 8859236..3ff3126 100755
--- a/t/t7201-co.sh
+++ b/t/t7201-co.sh
@@ -415,7 +415,7 @@ test_expect_success 'checkout w/--track from non-branch HEAD fails' '
     test_must_fail git checkout --track -b track &&
     test_must_fail git rev-parse --verify track &&
     test_must_fail git symbolic-ref HEAD &&
-    test "z$(git rev-parse master^0)" = "z$(git rev-parse HEAD)"
+    test_cmp_rev master^0 HEAD
 '
 
 test_expect_success 'checkout w/--track from tag fails' '
@@ -424,7 +424,7 @@ test_expect_success 'checkout w/--track from tag fails' '
     test_must_fail git checkout --track -b track frotz &&
     test_must_fail git rev-parse --verify track &&
     test_must_fail git symbolic-ref HEAD &&
-    test "z$(git rev-parse master^0)" = "z$(git rev-parse HEAD)"
+    test_cmp_rev master^0 HEAD
 '
 
 test_expect_success 'detach a symbolic link HEAD' '
@@ -436,7 +436,7 @@ test_expect_success 'detach a symbolic link HEAD' '
     test "z$it" = zrefs/heads/master &&
     here=$(git rev-parse --verify refs/heads/master) &&
     git checkout side^ &&
-    test "z$(git rev-parse --verify refs/heads/master)" = "z$here"
+    test_cmp_rev refs/heads/master "$here"
 '
 
 test_expect_success \
@@ -446,19 +446,19 @@ test_expect_success \
 
     git checkout --track origin/koala/bear &&
     test "refs/heads/koala/bear" = "$(git symbolic-ref HEAD)" &&
-    test "$(git rev-parse HEAD)" = "$(git rev-parse renamer)" &&
+    test_cmp_rev HEAD renamer &&
 
     git checkout master && git branch -D koala/bear &&
 
     git checkout --track refs/remotes/origin/koala/bear &&
     test "refs/heads/koala/bear" = "$(git symbolic-ref HEAD)" &&
-    test "$(git rev-parse HEAD)" = "$(git rev-parse renamer)" &&
+    test_cmp_rev HEAD renamer &&
 
     git checkout master && git branch -D koala/bear &&
 
     git checkout --track remotes/origin/koala/bear &&
     test "refs/heads/koala/bear" = "$(git symbolic-ref HEAD)" &&
-    test "$(git rev-parse HEAD)" = "$(git rev-parse renamer)"
+    test_cmp_rev HEAD renamer
 '
 
 test_expect_success \
diff --git a/t/t7601-merge-pull-config.sh b/t/t7601-merge-pull-config.sh
index c6c44ec..cf50055 100755
--- a/t/t7601-merge-pull-config.sh
+++ b/t/t7601-merge-pull-config.sh
@@ -42,7 +42,7 @@ test_expect_success 'fast-forward pull succeeds with "true" in pull.ff' '
 	git reset --hard c0 &&
 	test_config pull.ff true &&
 	git pull . c1 &&
-	test "$(git rev-parse HEAD)" = "$(git rev-parse c1)"
+	test_cmp_rev HEAD c1
 '
 
 test_expect_success 'pull.ff=true overrides merge.ff=false' '
@@ -50,15 +50,15 @@ test_expect_success 'pull.ff=true overrides merge.ff=false' '
 	test_config merge.ff false &&
 	test_config pull.ff true &&
 	git pull . c1 &&
-	test "$(git rev-parse HEAD)" = "$(git rev-parse c1)"
+	test_cmp_rev HEAD c1
 '
 
 test_expect_success 'fast-forward pull creates merge with "false" in pull.ff' '
 	git reset --hard c0 &&
 	test_config pull.ff false &&
 	git pull . c1 &&
-	test "$(git rev-parse HEAD^1)" = "$(git rev-parse c0)" &&
-	test "$(git rev-parse HEAD^2)" = "$(git rev-parse c1)"
+	test_cmp_rev HEAD^1 c0 &&
+	test_cmp_rev HEAD^2 c1
 '
 
 test_expect_success 'pull prevents non-fast-forward with "only" in pull.ff' '
@@ -79,17 +79,16 @@ test_expect_success 'merge c1 with c2 and c3 (recursive in pull.octopus)' '
 	git reset --hard c1 &&
 	git config pull.octopus "recursive" &&
 	test_must_fail git merge c2 c3 &&
-	test "$(git rev-parse c1)" = "$(git rev-parse HEAD)"
+	test_cmp_rev c1 HEAD
 '
 
 test_expect_success 'merge c1 with c2 and c3 (recursive and octopus in pull.octopus)' '
 	git reset --hard c1 &&
 	git config pull.octopus "recursive octopus" &&
 	git merge c2 c3 &&
-	test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&
-	test "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&
-	test "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&
-	test "$(git rev-parse c3)" = "$(git rev-parse HEAD^3)" &&
+	test_cmp_rev c1 HEAD^1 &&
+	test_cmp_rev c2 HEAD^2 &&
+	test_cmp_rev c3 HEAD^3 &&
 	git diff --exit-code &&
 	test -f c0.c &&
 	test -f c1.c &&
diff --git a/t/t7603-merge-reduce-heads.sh b/t/t7603-merge-reduce-heads.sh
index 9894895..4e69fe7 100755
--- a/t/t7603-merge-reduce-heads.sh
+++ b/t/t7603-merge-reduce-heads.sh
@@ -46,11 +46,10 @@ test_expect_success 'setup' '
 test_expect_success 'merge c1 with c2, c3, c4, c5' '
 	git reset --hard c1 &&
 	git merge c2 c3 c4 c5 &&
-	test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&
-	test "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&
-	test "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&
-	test "$(git rev-parse c3)" = "$(git rev-parse HEAD^3)" &&
-	test "$(git rev-parse c5)" = "$(git rev-parse HEAD^4)" &&
+	test_cmp_rev c1 HEAD^1 &&
+	test_cmp_rev c2 HEAD^2 &&
+	test_cmp_rev c3 HEAD^3 &&
+	test_cmp_rev c5 HEAD^4 &&
 	git diff --exit-code &&
 	test -f c0.c &&
 	test -f c1.c &&
@@ -69,11 +68,10 @@ test_expect_success 'merge c1 with c2, c3, c4, c5' '
 test_expect_success 'pull c2, c3, c4, c5 into c1' '
 	git reset --hard c1 &&
 	git pull . c2 c3 c4 c5 &&
-	test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&
-	test "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&
-	test "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&
-	test "$(git rev-parse c3)" = "$(git rev-parse HEAD^3)" &&
-	test "$(git rev-parse c5)" = "$(git rev-parse HEAD^4)" &&
+	test_cmp_rev c1 HEAD^1 &&
+	test_cmp_rev c2 HEAD^2 &&
+	test_cmp_rev c3 HEAD^3 &&
+	test_cmp_rev c5 HEAD^4 &&
 	git diff --exit-code &&
 	test -f c0.c &&
 	test -f c1.c &&
@@ -113,8 +111,8 @@ test_expect_success 'merge E and I' '
 '
 
 test_expect_success 'verify merge result' '
-	test $(git rev-parse HEAD^1) = $(git rev-parse E) &&
-	test $(git rev-parse HEAD^2) = $(git rev-parse I)
+	test_cmp_rev HEAD^1 E &&
+	test_cmp_rev HEAD^2 I
 '
 
 test_expect_success 'add conflicts' '
@@ -139,8 +137,8 @@ test_expect_success 'merge E2 and I2, causing a conflict and resolve it' '
 '
 
 test_expect_success 'verify merge result' '
-	test $(git rev-parse HEAD^1) = $(git rev-parse E2) &&
-	test $(git rev-parse HEAD^2) = $(git rev-parse I2)
+	test_cmp_rev HEAD^1 E2 &&
+	test_cmp_rev HEAD^2 I2
 '
 
 test_expect_success 'fast-forward to redundant refs' '
@@ -149,7 +147,7 @@ test_expect_success 'fast-forward to redundant refs' '
 '
 
 test_expect_success 'verify merge result' '
-	test $(git rev-parse HEAD) = $(git rev-parse c5)
+	test_cmp_rev HEAD c5
 '
 
 test_expect_success 'merge up-to-date redundant refs' '
@@ -158,7 +156,7 @@ test_expect_success 'merge up-to-date redundant refs' '
 '
 
 test_expect_success 'verify merge result' '
-	test $(git rev-parse HEAD) = $(git rev-parse c5)
+	test_cmp_rev HEAD c5
 '
 
 test_done
diff --git a/t/t7605-merge-resolve.sh b/t/t7605-merge-resolve.sh
index 0cb9d11..5be44f1 100755
--- a/t/t7605-merge-resolve.sh
+++ b/t/t7605-merge-resolve.sh
@@ -30,9 +30,8 @@ test_expect_success 'setup' '
 test_expect_success 'merge c1 to c2' '
 	git reset --hard c1 &&
 	git merge -s resolve c2 &&
-	test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&
-	test "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&
-	test "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&
+	test_cmp_rev c1 HEAD^1 &&
+	test_cmp_rev c2 HEAD^2 &&
 	git diff --exit-code &&
 	test -f c0.c &&
 	test -f c1.c &&
diff --git a/t/t9162-git-svn-dcommit-interactive.sh b/t/t9162-git-svn-dcommit-interactive.sh
index e38d9fa..ec77a98 100755
--- a/t/t9162-git-svn-dcommit-interactive.sh
+++ b/t/t9162-git-svn-dcommit-interactive.sh
@@ -21,7 +21,7 @@ test_expect_success 'answers: y [\n] yes' '
 		( echo "y
 
 y" | GIT_SVN_NOTTY=1 git svn dcommit --interactive ) &&
-		test $(git rev-parse HEAD) = $(git rev-parse remotes/git-svn)
+		test_cmp_rev HEAD remotes/git-svn
 	)
 	'
 
@@ -33,7 +33,7 @@ test_expect_success 'answers: yes yes no' '
 		( echo "yes
 yes
 no" | GIT_SVN_NOTTY=1 git svn dcommit --interactive ) &&
-		test $(git rev-parse HEAD^^^) = $(git rev-parse remotes/git-svn) &&
+		test_cmp_rev HEAD^^^ remotes/git-svn &&
 		git reset --hard remotes/git-svn
 	)
 	'
@@ -45,7 +45,7 @@ test_expect_success 'answers: yes quit' '
 		echo "change #3" >> foo && git commit -a -m"change #3" &&
 		( echo "yes
 quit" | GIT_SVN_NOTTY=1 git svn dcommit --interactive ) &&
-		test $(git rev-parse HEAD^^^) = $(git rev-parse remotes/git-svn) &&
+		test_cmp_rev HEAD^^^ remotes/git-svn &&
 		git reset --hard remotes/git-svn
 	)
 	'
@@ -56,7 +56,7 @@ test_expect_success 'answers: all' '
 		echo "change #2" >> foo && git commit -a -m"change #2" &&
 		echo "change #3" >> foo && git commit -a -m"change #3" &&
 		( echo "all" | GIT_SVN_NOTTY=1 git svn dcommit --interactive ) &&
-		test $(git rev-parse HEAD) = $(git rev-parse remotes/git-svn) &&
+		test_cmp_rev HEAD remotes/git-svn &&
 		git reset --hard remotes/git-svn
 	)
 	'
diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh
index 25bb60b..c284d75 100755
--- a/t/t9300-fast-import.sh
+++ b/t/t9300-fast-import.sh
@@ -368,7 +368,7 @@ test_expect_success 'B: accept branch name "TEMP_TAG"' '
 		git prune" &&
 	git fast-import <input &&
 	test -f .git/TEMP_TAG &&
-	test $(git rev-parse master) = $(git rev-parse TEMP_TAG^)
+	test_cmp_rev master TEMP_TAG^
 '
 
 test_expect_success 'B: accept empty committer' '
@@ -1110,7 +1110,7 @@ test_expect_success 'N: copy dirty subdirectory' '
 	INPUT_END
 
 	git fast-import <input &&
-	test $(git rev-parse N2^{tree}) = $(git rev-parse N3^{tree})
+	test_cmp_rev N2^{tree} N3^{tree}
 '
 
 test_expect_success 'N: copy directory by id' '
@@ -1507,7 +1507,7 @@ test_expect_success 'O: comments are all skipped' '
 	INPUT_END
 
 	git fast-import <input &&
-	test $(git rev-parse N3) = $(git rev-parse O1)
+	test_cmp_rev N3 O1
 '
 
 test_expect_success 'O: blank lines not necessary after data commands' '
@@ -1528,7 +1528,7 @@ test_expect_success 'O: blank lines not necessary after data commands' '
 	INPUT_END
 
 	git fast-import <input &&
-	test $(git rev-parse N3) = $(git rev-parse O2)
+	test_cmp_rev N3 O2
 '
 
 test_expect_success 'O: repack before next test' '
@@ -1575,7 +1575,7 @@ test_expect_success 'O: blank lines not necessary after other commands' '
 
 	git fast-import <input &&
 	test 8 = $(find .git/objects/pack -type f | wc -l) &&
-	test $(git rev-parse refs/tags/O3-2nd) = $(git rev-parse O3^) &&
+	test_cmp_rev refs/tags/O3-2nd O3^ &&
 	git log --reverse --pretty=oneline O3 | sed s/^.*z// >actual &&
 	test_cmp expect actual
 '
@@ -1721,7 +1721,7 @@ test_expect_success 'P: verbatim SHA gitlinks' '
 	git gc &&
 	git prune &&
 	git fast-import <input &&
-	test $(git rev-parse --verify subuse2) = $(git rev-parse --verify subuse1)
+	test_cmp_rev subuse2 subuse1
 '
 
 test_expect_success 'P: fail on inline gitlink' '
-- 
2.8.1.137.g522756c

  parent reply	other threads:[~2016-04-10 13:21 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-10 13:18 [PATCH v2 00/21] git bisect improvements Stephan Beyer
2016-04-10 13:18 ` [PATCH v2 01/21] bisect: write about `bisect next` in documentation Stephan Beyer
2016-04-10 13:18 ` [PATCH v2 02/21] bisect: allow 'bisect run' if no good commit is known Stephan Beyer
2016-04-10 13:18 ` [PATCH v2 03/21] t/test-lib-functions.sh: generalize test_cmp_rev Stephan Beyer
2016-04-11  0:07   ` Eric Sunshine
2016-04-15 20:00   ` Junio C Hamano
2016-04-24 19:51     ` Stephan Beyer
2016-04-25 18:08       ` Junio C Hamano
2016-04-10 13:18 ` Stephan Beyer [this message]
2016-04-11  0:07   ` [PATCH v2 04/21] t: use test_cmp_rev() where appropriate Eric Sunshine
2016-04-15 20:48   ` Junio C Hamano
2016-04-10 13:18 ` [PATCH v2 05/21] t6030: generalize test to not rely on current implementation Stephan Beyer
2016-04-10 13:47   ` Torsten Bögershausen
2016-04-10 19:16     ` Junio C Hamano
2016-04-10 19:37       ` Stephan Beyer
2016-04-11  0:23     ` Eric Sunshine
2016-04-15 21:07   ` Junio C Hamano
2016-04-10 13:18 ` [PATCH v2 06/21] bisect: add test for the bisect algorithm Stephan Beyer
2016-04-15 21:13   ` Junio C Hamano
2016-04-10 13:19 ` [PATCH v2 07/21] bisect: plug the biggest memory leak Stephan Beyer
2016-04-15 21:18   ` Junio C Hamano
2016-04-10 13:19 ` [PATCH v2 08/21] bisect: make bisect compile if DEBUG_BISECT is set Stephan Beyer
2016-04-15 21:22   ` Junio C Hamano
2016-04-10 13:19 ` [PATCH v2 09/21] bisect: make algorithm behavior independent of DEBUG_BISECT Stephan Beyer
2016-04-15 21:25   ` Junio C Hamano
2016-04-10 13:19 ` [PATCH v2 10/21] bisect: get rid of recursion in count_distance() Stephan Beyer
2016-04-15 21:31   ` Junio C Hamano
2016-04-10 13:19 ` [PATCH v2 11/21] bisect: use struct node_data array instead of int array Stephan Beyer
2016-04-12 23:02   ` Christian Couder
2016-04-15 21:47   ` Junio C Hamano
2016-04-10 13:19 ` [PATCH v2 12/21] bisect: replace clear_distance() by unique markers Stephan Beyer
2016-04-12 23:20   ` Christian Couder
2016-04-15 22:07   ` Junio C Hamano
2016-04-10 13:19 ` [PATCH v2 13/21] bisect: use commit instead of commit list as arguments when appropriate Stephan Beyer
2016-04-15 22:08   ` Junio C Hamano
2016-04-10 13:19 ` [PATCH v2 14/21] bisect: extract get_distance() function from code duplication Stephan Beyer
2016-04-15 22:08   ` Junio C Hamano
2016-04-10 13:19 ` [PATCH v2 15/21] bisect: introduce distance_direction() Stephan Beyer
2016-04-15 22:10   ` Junio C Hamano
2016-04-10 13:19 ` [PATCH v2 16/21] bisect: make total number of commits global Stephan Beyer
2016-04-13 13:23   ` Christian Couder
2016-04-15 22:11   ` Junio C Hamano
2016-04-16  0:44   ` Junio C Hamano
2016-04-10 13:19 ` [PATCH v2 17/21] bisect: rename count_distance() to compute_weight() Stephan Beyer
2016-04-13 13:32   ` Christian Couder
2016-04-15 22:12   ` Junio C Hamano
2016-04-10 13:19 ` [PATCH v2 18/21] bisect: prepare for different algorithms based on find_all Stephan Beyer
2016-04-15 22:36   ` Junio C Hamano
2016-04-10 13:19 ` [PATCH v2 19/21] bisect: use a bottom-up traversal to find relevant weights Stephan Beyer
2016-04-13 14:11   ` Christian Couder
2016-04-15 22:47   ` Junio C Hamano
2016-04-15 22:49   ` Junio C Hamano
2016-04-26 18:27   ` Junio C Hamano
2016-04-10 13:24 ` [PATCH v2 20/21] bisect: compute best bisection in compute_relevant_weights() Stephan Beyer
2016-04-10 13:24   ` [PATCH v2 21/21] bisect: get back halfway shortcut Stephan Beyer
2016-04-15 22:53     ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1460294354-7031-5-git-send-email-s-beyer@gmx.net \
    --to=s-beyer@gmx.net \
    --cc=christian.couder@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).