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

Signed-off-by: Stephan Beyer <s-be...@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

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to