(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
 |