211 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			211 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
test_description='recursive merge diff3 style conflict markers'
 | 
						|
 | 
						|
. ./test-lib.sh
 | 
						|
 | 
						|
# Setup:
 | 
						|
#          L1
 | 
						|
#            \
 | 
						|
#             ?
 | 
						|
#            /
 | 
						|
#          R1
 | 
						|
#
 | 
						|
# Where:
 | 
						|
#   L1 and R1 both have a file named 'content' but have no common history
 | 
						|
#
 | 
						|
 | 
						|
test_expect_success 'setup no merge base' '
 | 
						|
	test_create_repo no_merge_base &&
 | 
						|
	(
 | 
						|
		cd no_merge_base &&
 | 
						|
 | 
						|
		git checkout -b L &&
 | 
						|
		test_commit A content A &&
 | 
						|
 | 
						|
		git checkout --orphan R &&
 | 
						|
		test_commit B content B
 | 
						|
	)
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'check no merge base' '
 | 
						|
	(
 | 
						|
		cd no_merge_base &&
 | 
						|
 | 
						|
		git checkout L^0 &&
 | 
						|
 | 
						|
		test_must_fail git -c merge.conflictstyle=diff3 merge --allow-unrelated-histories -s recursive R^0 &&
 | 
						|
 | 
						|
		grep "|||||| empty tree" content
 | 
						|
	)
 | 
						|
'
 | 
						|
 | 
						|
# Setup:
 | 
						|
#          L1
 | 
						|
#         /  \
 | 
						|
#   master    ?
 | 
						|
#         \  /
 | 
						|
#          R1
 | 
						|
#
 | 
						|
# Where:
 | 
						|
#   L1 and R1 have modified the same file ('content') in conflicting ways
 | 
						|
#
 | 
						|
 | 
						|
test_expect_success 'setup unique merge base' '
 | 
						|
	test_create_repo unique_merge_base &&
 | 
						|
	(
 | 
						|
		cd unique_merge_base &&
 | 
						|
 | 
						|
		test_commit base content "1
 | 
						|
2
 | 
						|
3
 | 
						|
4
 | 
						|
5
 | 
						|
" &&
 | 
						|
 | 
						|
		git branch L &&
 | 
						|
		git branch R &&
 | 
						|
 | 
						|
		git checkout L &&
 | 
						|
		test_commit L content "1
 | 
						|
2
 | 
						|
3
 | 
						|
4
 | 
						|
5
 | 
						|
7" &&
 | 
						|
 | 
						|
		git checkout R &&
 | 
						|
		git rm content &&
 | 
						|
		test_commit R renamed "1
 | 
						|
2
 | 
						|
3
 | 
						|
4
 | 
						|
5
 | 
						|
six"
 | 
						|
	)
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'check unique merge base' '
 | 
						|
	(
 | 
						|
		cd unique_merge_base &&
 | 
						|
 | 
						|
		git checkout L^0 &&
 | 
						|
		MASTER=$(git rev-parse --short master) &&
 | 
						|
 | 
						|
		test_must_fail git -c merge.conflictstyle=diff3 merge -s recursive R^0 &&
 | 
						|
 | 
						|
		grep "|||||| $MASTER:content" renamed
 | 
						|
	)
 | 
						|
'
 | 
						|
 | 
						|
# Setup:
 | 
						|
#          L1---L2--L3
 | 
						|
#         /  \ /      \
 | 
						|
#   master    X1       ?
 | 
						|
#         \  / \      /
 | 
						|
#          R1---R2--R3
 | 
						|
#
 | 
						|
# Where:
 | 
						|
#   commits L1 and R1 have modified the same file in non-conflicting ways
 | 
						|
#   X1 is an auto-generated merge-base used when merging L1 and R1
 | 
						|
#   commits L2 and R2 are merges of R1 and L1 into L1 and R1, respectively
 | 
						|
#   commits L3 and R3 both modify 'content' in conflicting ways
 | 
						|
#
 | 
						|
 | 
						|
test_expect_success 'setup multiple merge bases' '
 | 
						|
	test_create_repo multiple_merge_bases &&
 | 
						|
	(
 | 
						|
		cd multiple_merge_bases &&
 | 
						|
 | 
						|
		test_commit initial content "1
 | 
						|
2
 | 
						|
3
 | 
						|
4
 | 
						|
5" &&
 | 
						|
 | 
						|
		git branch L &&
 | 
						|
		git branch R &&
 | 
						|
 | 
						|
		# Create L1
 | 
						|
		git checkout L &&
 | 
						|
		test_commit L1 content "0
 | 
						|
1
 | 
						|
2
 | 
						|
3
 | 
						|
4
 | 
						|
5" &&
 | 
						|
 | 
						|
		# Create R1
 | 
						|
		git checkout R &&
 | 
						|
		test_commit R1 content "1
 | 
						|
2
 | 
						|
3
 | 
						|
4
 | 
						|
5
 | 
						|
6" &&
 | 
						|
 | 
						|
		# Create L2
 | 
						|
		git checkout L &&
 | 
						|
		git merge R1 &&
 | 
						|
 | 
						|
		# Create R2
 | 
						|
		git checkout R &&
 | 
						|
		git merge L1 &&
 | 
						|
 | 
						|
		# Create L3
 | 
						|
		git checkout L &&
 | 
						|
		test_commit L3 content "0
 | 
						|
1
 | 
						|
2
 | 
						|
3
 | 
						|
4
 | 
						|
5
 | 
						|
A" &&
 | 
						|
 | 
						|
		# Create R3
 | 
						|
		git checkout R &&
 | 
						|
		git rm content &&
 | 
						|
		test_commit R3 renamed "0
 | 
						|
2
 | 
						|
3
 | 
						|
4
 | 
						|
5
 | 
						|
six"
 | 
						|
	)
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'check multiple merge bases' '
 | 
						|
	(
 | 
						|
		cd multiple_merge_bases &&
 | 
						|
 | 
						|
		git checkout L^0 &&
 | 
						|
 | 
						|
		test_must_fail git -c merge.conflictstyle=diff3 merge -s recursive R^0 &&
 | 
						|
 | 
						|
		grep "|||||| merged common ancestors:content" renamed
 | 
						|
	)
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'rebase --merge describes parent of commit being picked' '
 | 
						|
	test_create_repo rebase &&
 | 
						|
	(
 | 
						|
		cd rebase &&
 | 
						|
		test_commit base file &&
 | 
						|
		test_commit master file &&
 | 
						|
		git checkout -b side HEAD^ &&
 | 
						|
		test_commit side file &&
 | 
						|
		test_must_fail git -c merge.conflictstyle=diff3 rebase --merge master &&
 | 
						|
		grep "||||||| parent of" file
 | 
						|
	)
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'rebase --apply describes fake ancestor base' '
 | 
						|
	(
 | 
						|
		cd rebase &&
 | 
						|
		git rebase --abort &&
 | 
						|
		test_must_fail git -c merge.conflictstyle=diff3 rebase --apply master &&
 | 
						|
		grep "||||||| constructed merge base" file
 | 
						|
	)
 | 
						|
'
 | 
						|
 | 
						|
test_done
 |