* mv/merge-recursive:
  builtin-merge: release the lockfile in try_merge_strategy()
  merge-recursive: get rid of virtual_id
  merge-recursive: move current_{file,directory}_set to struct merge_options
  merge-recursive: move the global obuf to struct merge_options
  merge-recursive: get rid of the index_only global variable
  merge-recursive: move call_depth to struct merge_options
  cherry-pick/revert: make direct internal call to merge_tree()
  builtin-merge: avoid run_command_v_opt() for recursive and subtree
  merge-recursive: introduce merge_options
  merge-recursive.c: Add more generic merge_recursive_generic()
  Split out merge_recursive() to merge-recursive.c
		
	
		
			
				
	
	
		
			168 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
#
 | 
						|
# Copyright (c) 2007 Junio C Hamano
 | 
						|
#
 | 
						|
 | 
						|
test_description='per path merge controlled by merge attribute'
 | 
						|
 | 
						|
. ./test-lib.sh
 | 
						|
 | 
						|
test_expect_success setup '
 | 
						|
 | 
						|
	for f in text binary union
 | 
						|
	do
 | 
						|
		echo Initial >$f && git add $f || break
 | 
						|
	done &&
 | 
						|
	test_tick &&
 | 
						|
	git commit -m Initial &&
 | 
						|
 | 
						|
	git branch side &&
 | 
						|
	for f in text binary union
 | 
						|
	do
 | 
						|
		echo Master >>$f && git add $f || break
 | 
						|
	done &&
 | 
						|
	test_tick &&
 | 
						|
	git commit -m Master &&
 | 
						|
 | 
						|
	git checkout side &&
 | 
						|
	for f in text binary union
 | 
						|
	do
 | 
						|
		echo Side >>$f && git add $f || break
 | 
						|
	done &&
 | 
						|
	test_tick &&
 | 
						|
	git commit -m Side &&
 | 
						|
 | 
						|
	git tag anchor
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success merge '
 | 
						|
 | 
						|
	{
 | 
						|
		echo "binary -merge"
 | 
						|
		echo "union merge=union"
 | 
						|
	} >.gitattributes &&
 | 
						|
 | 
						|
	if git merge master
 | 
						|
	then
 | 
						|
		echo Gaah, should have conflicted
 | 
						|
		false
 | 
						|
	else
 | 
						|
		echo Ok, conflicted.
 | 
						|
	fi
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'check merge result in index' '
 | 
						|
 | 
						|
	git ls-files -u | grep binary &&
 | 
						|
	git ls-files -u | grep text &&
 | 
						|
	! (git ls-files -u | grep union)
 | 
						|
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'check merge result in working tree' '
 | 
						|
 | 
						|
	git cat-file -p HEAD:binary >binary-orig &&
 | 
						|
	grep "<<<<<<<" text &&
 | 
						|
	cmp binary-orig binary &&
 | 
						|
	! grep "<<<<<<<" union &&
 | 
						|
	grep Master union &&
 | 
						|
	grep Side union
 | 
						|
 | 
						|
'
 | 
						|
 | 
						|
cat >./custom-merge <<\EOF
 | 
						|
#!/bin/sh
 | 
						|
 | 
						|
orig="$1" ours="$2" theirs="$3" exit="$4"
 | 
						|
(
 | 
						|
	echo "orig is $orig"
 | 
						|
	echo "ours is $ours"
 | 
						|
	echo "theirs is $theirs"
 | 
						|
	echo "=== orig ==="
 | 
						|
	cat "$orig"
 | 
						|
	echo "=== ours ==="
 | 
						|
	cat "$ours"
 | 
						|
	echo "=== theirs ==="
 | 
						|
	cat "$theirs"
 | 
						|
) >"$ours+"
 | 
						|
cat "$ours+" >"$ours"
 | 
						|
rm -f "$ours+"
 | 
						|
exit "$exit"
 | 
						|
EOF
 | 
						|
chmod +x ./custom-merge
 | 
						|
 | 
						|
test_expect_success 'custom merge backend' '
 | 
						|
 | 
						|
	echo "* merge=union" >.gitattributes &&
 | 
						|
	echo "text merge=custom" >>.gitattributes &&
 | 
						|
 | 
						|
	git reset --hard anchor &&
 | 
						|
	git config --replace-all \
 | 
						|
	merge.custom.driver "./custom-merge %O %A %B 0" &&
 | 
						|
	git config --replace-all \
 | 
						|
	merge.custom.name "custom merge driver for testing" &&
 | 
						|
 | 
						|
	git merge master &&
 | 
						|
 | 
						|
	cmp binary union &&
 | 
						|
	sed -e 1,3d text >check-1 &&
 | 
						|
	o=$(git unpack-file master^:text) &&
 | 
						|
	a=$(git unpack-file side^:text) &&
 | 
						|
	b=$(git unpack-file master:text) &&
 | 
						|
	sh -c "./custom-merge $o $a $b 0" &&
 | 
						|
	sed -e 1,3d $a >check-2 &&
 | 
						|
	cmp check-1 check-2 &&
 | 
						|
	rm -f $o $a $b
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'custom merge backend' '
 | 
						|
 | 
						|
	git reset --hard anchor &&
 | 
						|
	git config --replace-all \
 | 
						|
	merge.custom.driver "./custom-merge %O %A %B 1" &&
 | 
						|
	git config --replace-all \
 | 
						|
	merge.custom.name "custom merge driver for testing" &&
 | 
						|
 | 
						|
	if git merge master
 | 
						|
	then
 | 
						|
		echo "Eh? should have conflicted"
 | 
						|
		false
 | 
						|
	else
 | 
						|
		echo "Ok, conflicted"
 | 
						|
	fi &&
 | 
						|
 | 
						|
	cmp binary union &&
 | 
						|
	sed -e 1,3d text >check-1 &&
 | 
						|
	o=$(git unpack-file master^:text) &&
 | 
						|
	a=$(git unpack-file anchor:text) &&
 | 
						|
	b=$(git unpack-file master:text) &&
 | 
						|
	sh -c "./custom-merge $o $a $b 0" &&
 | 
						|
	sed -e 1,3d $a >check-2 &&
 | 
						|
	cmp check-1 check-2 &&
 | 
						|
	rm -f $o $a $b
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'up-to-date merge without common ancestor' '
 | 
						|
	test_create_repo repo1 &&
 | 
						|
	test_create_repo repo2 &&
 | 
						|
	test_tick &&
 | 
						|
	(
 | 
						|
		cd repo1 &&
 | 
						|
		>a &&
 | 
						|
		git add a &&
 | 
						|
		git commit -m initial
 | 
						|
	) &&
 | 
						|
	test_tick &&
 | 
						|
	(
 | 
						|
		cd repo2 &&
 | 
						|
		git commit --allow-empty -m initial
 | 
						|
	) &&
 | 
						|
	test_tick &&
 | 
						|
	(
 | 
						|
		cd repo1 &&
 | 
						|
		git pull ../repo2 master
 | 
						|
	)
 | 
						|
'
 | 
						|
 | 
						|
test_done
 |