]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t: teach test_cmp_rev to accept ! for not-equals
authorDenton Liu <liu.denton@gmail.com>
Tue, 12 Nov 2019 23:07:45 +0000 (15:07 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 21 Nov 2019 00:41:51 +0000 (09:41 +0900)
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>
t/t2400-worktree-add.sh
t/t3400-rebase.sh
t/t3421-rebase-topology-linear.sh
t/t3430-rebase-merges.sh
t/t3432-rebase-fast-forward.sh
t/t3501-revert-cherry-pick.sh
t/t3508-cherry-pick-many-commits.sh
t/test-lib-functions.sh

index e819ba741ec96018755a08ef956998edfdd1dcc4..52d476979b6bf17261a9fbb89890850ffe4a2593 100755 (executable)
@@ -438,7 +438,7 @@ test_expect_success 'git worktree add does not match remote' '
                cd foo &&
                test_must_fail git config "branch.foo.remote" &&
                test_must_fail git config "branch.foo.merge" &&
-               ! test_cmp_rev refs/remotes/repo_a/foo refs/heads/foo
+               test_cmp_rev ! refs/remotes/repo_a/foo refs/heads/foo
        )
 '
 
@@ -483,7 +483,7 @@ test_expect_success 'git worktree --no-guess-remote option overrides config' '
                cd foo &&
                test_must_fail git config "branch.foo.remote" &&
                test_must_fail git config "branch.foo.merge" &&
-               ! test_cmp_rev refs/remotes/repo_a/foo refs/heads/foo
+               test_cmp_rev ! refs/remotes/repo_a/foo refs/heads/foo
        )
 '
 
index ab18ac5f28ac5e2828689d1ca4ca93b0990054c9..f267f6cd549463e023d87a2447b5461b33f79ad7 100755 (executable)
@@ -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' '
index b847064f9172dd131e0e536b2d442f98bc971c6c..325072b0a33e10ad44c3d3d561e207b2a03a13a6 100755 (executable)
@@ -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
        "
 }
index 9efcf4808ac92f13272e279fe4d7b660fccf8da3..abbdc26b1becedacfcae44ffa088efc9300f8e09 100755 (executable)
@@ -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 034ffc7e76caf16fe1bc9f448eb0c9675d386fc9..92f95b57da1424348b5fd898daf0c7722d4f20d2 100755 (executable)
@@ -64,7 +64,7 @@ test_rebase_same_head_ () {
                        test_cmp_rev \$oldhead \$newhead
                elif test $cmp = diff
                then
-                       ! test_cmp_rev \$oldhead \$newhead
+                       test_cmp_rev ! \$oldhead \$newhead
                fi
        "
 }
index d1c68af8c50e75255baa618ea297549b548c0fc2..1c51a9131dffa67b06e18da179fac118542eea0f 100755 (executable)
@@ -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' '
index b457333e1865de794e47fa6b601648fd67a02a7c..23070a7b73caf9baf1ae65d7b7ff282a0830c4e1 100755 (executable)
@@ -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() {
index b299ecc3265357bfb38e2131854b02868b5e9e0e..efcd96fc9ebdcc8b9cd8d657b8877e6c49433a30 100644 (file)
@@ -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