t: teach test_cmp_rev to accept ! for not-equals
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>
This commit is contained in:
		 Denton Liu
					Denton Liu
				
			
				
					committed by
					
						 Junio C Hamano
						Junio C Hamano
					
				
			
			
				
	
			
			
			 Junio C Hamano
						Junio C Hamano
					
				
			
						parent
						
							8cb7980382
						
					
				
				
					commit
					2c9e125b27
				
			| @ -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 | ||||
| 	) | ||||
| ' | ||||
|  | ||||
|  | ||||
| @ -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' ' | ||||
|  | ||||
| @ -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 | ||||
| 	" | ||||
| } | ||||
|  | ||||
| @ -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 | ||||
| 	|\ | ||||
|  | ||||
| @ -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 | ||||
| 	" | ||||
| } | ||||
|  | ||||
| @ -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' ' | ||||
|  | ||||
| @ -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() { | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
		Reference in New Issue
	
	Block a user