Previously when merging directly from a local tracking
branch like:
  git merge origin/master
The merge message said:
   Merge commit 'origin/master'
     * commit 'origin/master':
       ...
Instead, let's be more explicit about what we are merging:
   Merge remote branch 'origin/master'
     * origin/master:
       ...
We accomplish this by recognizing remote tracking branches
in git-merge when we build the simulated FETCH_HEAD output
that we feed to fmt-merge-msg.
In addition to a new test in t7608, we have to tweak the
expected output of t3409, which does such a merge.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			96 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 &&
 | 
						|
	cd .. &&
 | 
						|
 | 
						|
	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" &&
 | 
						|
	cd .. &&
 | 
						|
 | 
						|
	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 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
 |