 13931236b9
			
		
	
	13931236b9
	
	
	
		
			
			(Just like we did for documentation already) In the process, we change "non-remote branch" to "branch outside the refs/remotes/ hierarchy" to avoid the ugly "non-remote-tracking branch". The new formulation actually corresponds to how the code detects this case (i.e. prefixcmp(refname, "refs/remotes")). Also, we use 'remote-tracking branch' in generated merge messages (by merge an fmt-merge-msg). Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| #
 | |
| # Copyright(C) 2008 Stephen Habermann & Andreas Ericsson
 | |
| #
 | |
| test_description='git rebase -p should preserve merges
 | |
| 
 | |
| Run "git rebase -p" and check that merges are properly carried along
 | |
| '
 | |
| . ./test-lib.sh
 | |
| 
 | |
| GIT_AUTHOR_EMAIL=bogus_email_address
 | |
| export GIT_AUTHOR_EMAIL
 | |
| 
 | |
| # Clone 1 (trivial merge):
 | |
| #
 | |
| # A1--A2  <-- origin/master
 | |
| #  \   \
 | |
| #   B1--M  <-- topic
 | |
| #    \
 | |
| #     B2  <-- origin/topic
 | |
| #
 | |
| # Clone 2 (conflicting merge):
 | |
| #
 | |
| # A1--A2--B3   <-- origin/master
 | |
| #  \       \
 | |
| #   B1------M  <-- topic
 | |
| #    \
 | |
| #     B2       <-- origin/topic
 | |
| #
 | |
| # In both cases, 'topic' is rebased onto 'origin/topic'.
 | |
| 
 | |
| test_expect_success 'setup for merge-preserving rebase' \
 | |
| 	'echo First > A &&
 | |
| 	git add A &&
 | |
| 	git commit -m "Add A1" &&
 | |
| 	git checkout -b topic &&
 | |
| 	echo Second > B &&
 | |
| 	git add B &&
 | |
| 	git commit -m "Add B1" &&
 | |
| 	git checkout -f master &&
 | |
| 	echo Third >> A &&
 | |
| 	git commit -a -m "Modify A2" &&
 | |
| 
 | |
| 	git clone ./. clone1 &&
 | |
| 	(cd clone1 &&
 | |
| 	git checkout -b topic origin/topic &&
 | |
| 	git merge origin/master
 | |
| 	) &&
 | |
| 
 | |
| 	echo Fifth > B &&
 | |
| 	git add B &&
 | |
| 	git commit -m "Add different B" &&
 | |
| 
 | |
| 	git clone ./. clone2 &&
 | |
| 	(
 | |
| 		cd clone2 &&
 | |
| 		git checkout -b topic origin/topic &&
 | |
| 		test_must_fail git merge origin/master &&
 | |
| 		echo Resolved >B &&
 | |
| 		git add B &&
 | |
| 		git commit -m "Merge origin/master into topic"
 | |
| 	) &&
 | |
| 
 | |
| 	git checkout topic &&
 | |
| 	echo Fourth >> B &&
 | |
| 	git commit -a -m "Modify B2"
 | |
| '
 | |
| 
 | |
| test_expect_success 'rebase -p fakes interactive rebase' '
 | |
| 	(
 | |
| 	cd clone1 &&
 | |
| 	git fetch &&
 | |
| 	git rebase -p origin/topic &&
 | |
| 	test 1 = $(git rev-list --all --pretty=oneline | grep "Modify A" | wc -l) &&
 | |
| 	test 1 = $(git rev-list --all --pretty=oneline | grep "Merge remote-tracking branch " | wc -l)
 | |
| 	)
 | |
| '
 | |
| 
 | |
| test_expect_success '--continue works after a conflict' '
 | |
| 	(
 | |
| 	cd clone2 &&
 | |
| 	git fetch &&
 | |
| 	test_must_fail git rebase -p origin/topic &&
 | |
| 	test 2 = $(git ls-files B | wc -l) &&
 | |
| 	echo Resolved again > B &&
 | |
| 	test_must_fail git rebase --continue &&
 | |
| 	grep "^@@@ " .git/rebase-merge/patch &&
 | |
| 	git add B &&
 | |
| 	git rebase --continue &&
 | |
| 	test 1 = $(git rev-list --all --pretty=oneline | grep "Modify A" | wc -l) &&
 | |
| 	test 1 = $(git rev-list --all --pretty=oneline | grep "Add different" | wc -l) &&
 | |
| 	test 1 = $(git rev-list --all --pretty=oneline | grep "Merge origin" | wc -l)
 | |
| 	)
 | |
| '
 | |
| 
 | |
| test_done
 |