Change a fragile pattern introduced in 696acf45f9 (checkout:
implement "-" abbreviation, add docs and tests, 2009-01-17) to check
the exit code of both "git symbolic-ref" and "git rev-parse".
Without this change this test will become flaky e.g. under
SANITIZE=leak if some (but not all) memory leaks revealed by these
commands are fixed.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
	
		
			
				
	
	
		
			170 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
test_description='checkout can switch to last branch and merge base'
 | 
						|
 | 
						|
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
 | 
						|
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 | 
						|
 | 
						|
. ./test-lib.sh
 | 
						|
 | 
						|
test_expect_success 'setup' '
 | 
						|
	test_commit initial world hello &&
 | 
						|
	git branch other &&
 | 
						|
	test_commit --append second world "hello again"
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success '"checkout -" does not work initially' '
 | 
						|
	test_must_fail git checkout -
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'first branch switch' '
 | 
						|
	git checkout other
 | 
						|
'
 | 
						|
 | 
						|
test_cmp_symbolic_HEAD_ref () {
 | 
						|
	echo refs/heads/"$1" >expect &&
 | 
						|
	git symbolic-ref HEAD >actual &&
 | 
						|
	test_cmp expect actual
 | 
						|
}
 | 
						|
 | 
						|
test_expect_success '"checkout -" switches back' '
 | 
						|
	git checkout - &&
 | 
						|
	test_cmp_symbolic_HEAD_ref main
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success '"checkout -" switches forth' '
 | 
						|
	git checkout - &&
 | 
						|
	test_cmp_symbolic_HEAD_ref other
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'detach HEAD' '
 | 
						|
	git checkout $(git rev-parse HEAD)
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success '"checkout -" attaches again' '
 | 
						|
	git checkout - &&
 | 
						|
	test_cmp_symbolic_HEAD_ref other
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success '"checkout -" detaches again' '
 | 
						|
	git checkout - &&
 | 
						|
 | 
						|
	git rev-parse other >expect &&
 | 
						|
	git rev-parse HEAD >actual &&
 | 
						|
	test_cmp expect actual &&
 | 
						|
 | 
						|
	test_must_fail git symbolic-ref HEAD
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'more switches' '
 | 
						|
	for i in 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
 | 
						|
	do
 | 
						|
		git checkout -b branch$i || return 1
 | 
						|
	done
 | 
						|
'
 | 
						|
 | 
						|
more_switches () {
 | 
						|
	for i in 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
 | 
						|
	do
 | 
						|
		git checkout branch$i || return 1
 | 
						|
	done
 | 
						|
}
 | 
						|
 | 
						|
test_expect_success 'switch to the last' '
 | 
						|
	more_switches &&
 | 
						|
	git checkout @{-1} &&
 | 
						|
	test_cmp_symbolic_HEAD_ref branch2
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'switch to second from the last' '
 | 
						|
	more_switches &&
 | 
						|
	git checkout @{-2} &&
 | 
						|
	test_cmp_symbolic_HEAD_ref branch3
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'switch to third from the last' '
 | 
						|
	more_switches &&
 | 
						|
	git checkout @{-3} &&
 | 
						|
	test_cmp_symbolic_HEAD_ref branch4
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'switch to fourth from the last' '
 | 
						|
	more_switches &&
 | 
						|
	git checkout @{-4} &&
 | 
						|
	test_cmp_symbolic_HEAD_ref branch5
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'switch to twelfth from the last' '
 | 
						|
	more_switches &&
 | 
						|
	git checkout @{-12} &&
 | 
						|
	test_cmp_symbolic_HEAD_ref branch13
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'merge base test setup' '
 | 
						|
	git checkout -b another other &&
 | 
						|
	test_commit --append third world "hello again"
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'another...main' '
 | 
						|
	git checkout another &&
 | 
						|
	git checkout another...main &&
 | 
						|
 | 
						|
	git rev-parse --verify main^ >expect &&
 | 
						|
	git rev-parse --verify HEAD >actual &&
 | 
						|
	test_cmp expect actual
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success '...main' '
 | 
						|
	git checkout another &&
 | 
						|
	git checkout ...main &&
 | 
						|
 | 
						|
	git rev-parse --verify main^ >expect &&
 | 
						|
	git rev-parse --verify HEAD >actual &&
 | 
						|
	test_cmp expect actual
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'main...' '
 | 
						|
	git checkout another &&
 | 
						|
	git checkout main... &&
 | 
						|
 | 
						|
	git rev-parse --verify main^ >expect &&
 | 
						|
	git rev-parse --verify HEAD >actual &&
 | 
						|
	test_cmp expect actual
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success '"checkout -" works after a rebase A' '
 | 
						|
	git checkout main &&
 | 
						|
	git checkout other &&
 | 
						|
	git rebase main &&
 | 
						|
	git checkout - &&
 | 
						|
	test_cmp_symbolic_HEAD_ref main
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success '"checkout -" works after a rebase A B' '
 | 
						|
	git branch moodle main~1 &&
 | 
						|
	git checkout main &&
 | 
						|
	git checkout other &&
 | 
						|
	git rebase main moodle &&
 | 
						|
	git checkout - &&
 | 
						|
	test_cmp_symbolic_HEAD_ref main
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success '"checkout -" works after a rebase -i A' '
 | 
						|
	git checkout main &&
 | 
						|
	git checkout other &&
 | 
						|
	git rebase -i main &&
 | 
						|
	git checkout - &&
 | 
						|
	test_cmp_symbolic_HEAD_ref main
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success '"checkout -" works after a rebase -i A B' '
 | 
						|
	git branch foodle main~1 &&
 | 
						|
	git checkout main &&
 | 
						|
	git checkout other &&
 | 
						|
	git rebase main foodle &&
 | 
						|
	git checkout - &&
 | 
						|
	test_cmp_symbolic_HEAD_ref main
 | 
						|
'
 | 
						|
 | 
						|
test_done
 |