196 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
	
		
			4.8 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>
 | |
| 	 Date: Thu Apr 7 15:14:13 2005 -0700
 | |
| 	 1 file changed, 1 insertion(+)
 | |
| 	[master OBJID] third
 | |
| 	 Author: A U Thor <author@example.com>
 | |
| 	 Date: Thu Apr 7 15:15:13 2005 -0700
 | |
| 	 1 file changed, 1 insertion(+)
 | |
| 	[master OBJID] fourth
 | |
| 	 Author: A U Thor <author@example.com>
 | |
| 	 Date: Thu Apr 7 15:16:13 2005 -0700
 | |
| 	 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>
 | |
| 	 Date: Thu Apr 7 15:14:13 2005 -0700
 | |
| 	 1 file changed, 1 insertion(+)
 | |
| 	Trying simple merge.
 | |
| 	[master OBJID] third
 | |
| 	 Author: A U Thor <author@example.com>
 | |
| 	 Date: Thu Apr 7 15:15:13 2005 -0700
 | |
| 	 1 file changed, 1 insertion(+)
 | |
| 	Trying simple merge.
 | |
| 	[master OBJID] fourth
 | |
| 	 Author: A U Thor <author@example.com>
 | |
| 	 Date: Thu Apr 7 15:16:13 2005 -0700
 | |
| 	 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
 |