In the case where we are using test_cmp_rev() to report not-equals, we
write `! test_cmp_rev`. However, since test_cmp_rev() contains
r1=$(git rev-parse --verify "$1") &&
r2=$(git rev-parse --verify "$2") &&
`! test_cmp_rev` will succeed if any of the rev-parses fail. This
behavior is not desired. We want the rev-parses to _always_ be
successful.
Rewrite test_cmp_rev() to optionally accept "!" as the first argument to
do a not-equals comparison. Rewrite `! test_cmp_rev` to `test_cmp_rev !`
in all tests to take advantage of this new functionality.
Also, rewrite the rev-parse logic to end with a `|| return 1` instead of
&&-chaining into the rev-comparison logic. This makes it obvious to
future readers that we explicitly intend on returning early if either of
the rev-parses fail.
Signed-off-by: Denton Liu <liu.denton@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Denton Liu committedNov 12, 2019 at 15:07 UTC2c9e125b2727c33dccdba1b2a46f462b77e10bed
index ab18ac5f28..f267f6cd54 100755--- a/t/t3400-rebase.sh+++ b/t/t3400-rebase.sh@@ -64,7 +64,7 @@ test_expect_success 'rebase sets ORIG_HEAD to pre-rebase state' ' pre="$(git rev-parse --verify HEAD)" && git rebase master && test_cmp_rev "$pre" ORIG_HEAD &&- ! test_cmp_rev "$pre" HEAD+ test_cmp_rev ! "$pre" HEAD ' test_expect_success 'rebase, with <onto> and <upstream> specified as :/quuxery' '
t/t3421-rebase-topology-linear.sh
+3-3
index b847064f91..325072b0a3 100755--- a/t/t3421-rebase-topology-linear.sh+++ b/t/t3421-rebase-topology-linear.sh@@ -61,7 +61,7 @@ test_run_rebase () { test_expect_$result "rebase $* -f rewrites even if upstream is an ancestor" " reset_rebase && git rebase $* -f b e &&- ! test_cmp_rev e HEAD &&+ test_cmp_rev ! e HEAD && test_cmp_rev b HEAD~2 && test_linear_range 'd e' b.. "@@ -78,7 +78,7 @@ test_run_rebase () { test_expect_$result "rebase $* -f rewrites even if remote upstream is an ancestor" " reset_rebase && git rebase $* -f branch-b branch-e &&- ! test_cmp_rev branch-e origin/branch-e &&+ test_cmp_rev ! branch-e origin/branch-e && test_cmp_rev branch-b HEAD~2 && test_linear_range 'd e' branch-b.. "@@ -368,7 +368,7 @@ test_run_rebase () { test_expect_$result "rebase $* -f --root on linear history causes re-write" " reset_rebase && git rebase $* -f --root c &&- ! test_cmp_rev a HEAD~2 &&+ test_cmp_rev ! a HEAD~2 && test_linear_range 'a b c' HEAD " }
t/t3430-rebase-merges.sh
+1-1
index 9efcf4808a..abbdc26b1b 100755--- a/t/t3430-rebase-merges.sh+++ b/t/t3430-rebase-merges.sh@@ -346,7 +346,7 @@ test_expect_success 'A root commit can be a cousin, treat it that way' ' git merge --allow-unrelated-histories khnum && test_tick && git rebase -f -r HEAD^ &&- ! test_cmp_rev HEAD^2 khnum &&+ test_cmp_rev ! HEAD^2 khnum && test_cmp_graph HEAD^.. <<-\EOF && * Merge branch '\''khnum'\'' into asherah |\
index d1c68af8c5..1c51a9131d 100755--- a/t/t3501-revert-cherry-pick.sh+++ b/t/t3501-revert-cherry-pick.sh@@ -106,7 +106,7 @@ test_expect_success 'cherry-pick on unborn branch' ' rm -rf * && git cherry-pick initial && git diff --quiet initial &&- ! test_cmp_rev initial HEAD+ test_cmp_rev ! initial HEAD ' test_expect_success 'cherry-pick "-" to pick from previous branch' '
t/t3508-cherry-pick-many-commits.sh
+1-1
index b457333e18..23070a7b73 100755--- a/t/t3508-cherry-pick-many-commits.sh+++ b/t/t3508-cherry-pick-many-commits.sh@@ -5,7 +5,7 @@ test_description='test cherry-picking many commits' . ./test-lib.sh check_head_differs_from() {- ! test_cmp_rev HEAD "$1"+ test_cmp_rev ! HEAD "$1" } check_head_equals() {
t/test-lib-functions.sh
+15-4
index b299ecc326..efcd96fc9e 100644--- a/t/test-lib-functions.sh+++ b/t/test-lib-functions.sh@@ -1012,19 +1012,30 @@ test_must_be_empty () { fi }-# Tests that its two parameters refer to the same revision+# Tests that its two parameters refer to the same revision, or if '!' is+# provided first, that its other two parameters refer to different+# revisions. test_cmp_rev () {+ local op='=' wrong_result=different++ if test $# -ge 1 && test "x$1" = 'x!'+ then+ op='!='+ wrong_result='the same'+ shift+ fi if test $# != 2 then error "bug in the test script: test_cmp_rev requires two revisions, but got $#" else local r1 r2 r1=$(git rev-parse --verify "$1") &&- r2=$(git rev-parse --verify "$2") &&- if test "$r1" != "$r2"+ r2=$(git rev-parse --verify "$2") || return 1++ if ! test "$r1" "$op" "$r2" then cat >&4 <<-EOF- error: two revisions point to different objects:+ error: two revisions point to $wrong_result objects: '$1': $r1 '$2': $r2 EOF