191 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			191 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
#!/bin/sh
 | 
						|
 | 
						|
test_description='test cherry-picking many commits'
 | 
						|
 | 
						|
. ./test-lib.sh
 | 
						|
 | 
						|
check_head_differs_from() {
 | 
						|
	! test_cmp_rev HEAD "$1"
 | 
						|
}
 | 
						|
 | 
						|
check_head_equals() {
 | 
						|
	test_cmp_rev HEAD "$1"
 | 
						|
}
 | 
						|
 | 
						|
test_expect_success setup '
 | 
						|
	echo first > file1 &&
 | 
						|
	git add file1 &&
 | 
						|
	test_tick &&
 | 
						|
	git commit -m "first" &&
 | 
						|
	git tag first &&
 | 
						|
 | 
						|
	git checkout -b other &&
 | 
						|
	for val in second third fourth
 | 
						|
	do
 | 
						|
		echo $val >> file1 &&
 | 
						|
		git add file1 &&
 | 
						|
		test_tick &&
 | 
						|
		git commit -m "$val" &&
 | 
						|
		git tag $val
 | 
						|
	done
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'cherry-pick first..fourth works' '
 | 
						|
	git checkout -f master &&
 | 
						|
	git reset --hard first &&
 | 
						|
	test_tick &&
 | 
						|
	git cherry-pick first..fourth &&
 | 
						|
	git diff --quiet other &&
 | 
						|
	git diff --quiet HEAD other &&
 | 
						|
	check_head_differs_from fourth
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'cherry-pick three one two works' '
 | 
						|
	git checkout -f first &&
 | 
						|
	test_commit one &&
 | 
						|
	test_commit two &&
 | 
						|
	test_commit three &&
 | 
						|
	git checkout -f master &&
 | 
						|
	git reset --hard first &&
 | 
						|
	git cherry-pick three one two &&
 | 
						|
	git diff --quiet three &&
 | 
						|
	git diff --quiet HEAD three &&
 | 
						|
	test "$(git log --reverse --format=%s first..)" = "three
 | 
						|
one
 | 
						|
two"
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'cherry-pick three one two: fails' '
 | 
						|
	git checkout -f master &&
 | 
						|
	git reset --hard first &&
 | 
						|
	test_must_fail git cherry-pick three one two:
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'output to keep user entertained during multi-pick' '
 | 
						|
	cat <<-\EOF >expected &&
 | 
						|
	[master OBJID] second
 | 
						|
	 Author: A U Thor <author@example.com>
 | 
						|
	 1 file changed, 1 insertion(+)
 | 
						|
	[master OBJID] third
 | 
						|
	 Author: A U Thor <author@example.com>
 | 
						|
	 1 file changed, 1 insertion(+)
 | 
						|
	[master OBJID] fourth
 | 
						|
	 Author: A U Thor <author@example.com>
 | 
						|
	 1 file changed, 1 insertion(+)
 | 
						|
	EOF
 | 
						|
 | 
						|
	git checkout -f master &&
 | 
						|
	git reset --hard first &&
 | 
						|
	test_tick &&
 | 
						|
	git cherry-pick first..fourth >actual &&
 | 
						|
	sed -e "s/$_x05[0-9a-f][0-9a-f]/OBJID/" <actual >actual.fuzzy &&
 | 
						|
	test_line_count -ge 3 actual.fuzzy &&
 | 
						|
	test_i18ncmp expected actual.fuzzy
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'cherry-pick --strategy resolve first..fourth works' '
 | 
						|
	git checkout -f master &&
 | 
						|
	git reset --hard first &&
 | 
						|
	test_tick &&
 | 
						|
	git cherry-pick --strategy resolve first..fourth &&
 | 
						|
	git diff --quiet other &&
 | 
						|
	git diff --quiet HEAD other &&
 | 
						|
	check_head_differs_from fourth
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'output during multi-pick indicates merge strategy' '
 | 
						|
	cat <<-\EOF >expected &&
 | 
						|
	Trying simple merge.
 | 
						|
	[master OBJID] second
 | 
						|
	 Author: A U Thor <author@example.com>
 | 
						|
	 1 file changed, 1 insertion(+)
 | 
						|
	Trying simple merge.
 | 
						|
	[master OBJID] third
 | 
						|
	 Author: A U Thor <author@example.com>
 | 
						|
	 1 file changed, 1 insertion(+)
 | 
						|
	Trying simple merge.
 | 
						|
	[master OBJID] fourth
 | 
						|
	 Author: A U Thor <author@example.com>
 | 
						|
	 1 file changed, 1 insertion(+)
 | 
						|
	EOF
 | 
						|
 | 
						|
	git checkout -f master &&
 | 
						|
	git reset --hard first &&
 | 
						|
	test_tick &&
 | 
						|
	git cherry-pick --strategy resolve first..fourth >actual &&
 | 
						|
	sed -e "s/$_x05[0-9a-f][0-9a-f]/OBJID/" <actual >actual.fuzzy &&
 | 
						|
	test_i18ncmp expected actual.fuzzy
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'cherry-pick --ff first..fourth works' '
 | 
						|
	git checkout -f master &&
 | 
						|
	git reset --hard first &&
 | 
						|
	test_tick &&
 | 
						|
	git cherry-pick --ff first..fourth &&
 | 
						|
	git diff --quiet other &&
 | 
						|
	git diff --quiet HEAD other &&
 | 
						|
	check_head_equals fourth
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'cherry-pick -n first..fourth works' '
 | 
						|
	git checkout -f master &&
 | 
						|
	git reset --hard first &&
 | 
						|
	test_tick &&
 | 
						|
	git cherry-pick -n first..fourth &&
 | 
						|
	git diff --quiet other &&
 | 
						|
	git diff --cached --quiet other &&
 | 
						|
	git diff --quiet HEAD first
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'revert first..fourth works' '
 | 
						|
	git checkout -f master &&
 | 
						|
	git reset --hard fourth &&
 | 
						|
	test_tick &&
 | 
						|
	git revert first..fourth &&
 | 
						|
	git diff --quiet first &&
 | 
						|
	git diff --cached --quiet first &&
 | 
						|
	git diff --quiet HEAD first
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'revert ^first fourth works' '
 | 
						|
	git checkout -f master &&
 | 
						|
	git reset --hard fourth &&
 | 
						|
	test_tick &&
 | 
						|
	git revert ^first fourth &&
 | 
						|
	git diff --quiet first &&
 | 
						|
	git diff --cached --quiet first &&
 | 
						|
	git diff --quiet HEAD first
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'revert fourth fourth~1 fourth~2 works' '
 | 
						|
	git checkout -f master &&
 | 
						|
	git reset --hard fourth &&
 | 
						|
	test_tick &&
 | 
						|
	git revert fourth fourth~1 fourth~2 &&
 | 
						|
	git diff --quiet first &&
 | 
						|
	git diff --cached --quiet first &&
 | 
						|
	git diff --quiet HEAD first
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'cherry-pick -3 fourth works' '
 | 
						|
	git checkout -f master &&
 | 
						|
	git reset --hard first &&
 | 
						|
	test_tick &&
 | 
						|
	git cherry-pick -3 fourth &&
 | 
						|
	git diff --quiet other &&
 | 
						|
	git diff --quiet HEAD other &&
 | 
						|
	check_head_differs_from fourth
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'cherry-pick --stdin works' '
 | 
						|
	git checkout -f master &&
 | 
						|
	git reset --hard first &&
 | 
						|
	test_tick &&
 | 
						|
	git rev-list --reverse first..fourth | git cherry-pick --stdin &&
 | 
						|
	git diff --quiet other &&
 | 
						|
	git diff --quiet HEAD other &&
 | 
						|
	check_head_differs_from fourth
 | 
						|
'
 | 
						|
 | 
						|
test_done
 |