Merge branch 'jk/merge-one-file-working-tree'
* jk/merge-one-file-working-tree: merge-one-file: fix broken merges with alternate work trees add tests for merge-index / merge-one-filemaint
						commit
						ac13e7c514
					
				|  | @ -22,6 +22,11 @@ LONG_USAGE="Usage: git merge-one-file $USAGE | |||
|  | ||||
| Blob ids and modes should be empty for missing files." | ||||
|  | ||||
| SUBDIRECTORY_OK=Yes | ||||
| . git-sh-setup | ||||
| cd_to_toplevel | ||||
| require_work_tree | ||||
|  | ||||
| if ! test "$#" -eq 7 | ||||
| then | ||||
| 	echo "$LONG_USAGE" | ||||
|  | @ -132,7 +137,7 @@ case "${1:-.}${2:-.}${3:-.}" in | |||
|  | ||||
| 	# Create the working tree file, using "our tree" version from the | ||||
| 	# index, and then store the result of the merge. | ||||
| 	git checkout-index -f --stage=2 -- "$4" && cat "$src1" >"$4" | ||||
| 	git checkout-index -f --stage=2 -- "$4" && cat "$src1" >"$4" || exit 1 | ||||
| 	rm -f -- "$orig" "$src1" "$src2" | ||||
|  | ||||
| 	if [ "$6" != "$7" ]; then | ||||
|  |  | |||
|  | @ -0,0 +1,100 @@ | |||
| #!/bin/sh | ||||
|  | ||||
| test_description='basic git merge-index / git-merge-one-file tests' | ||||
| . ./test-lib.sh | ||||
|  | ||||
| test_expect_success 'setup diverging branches' ' | ||||
| 	for i in 1 2 3 4 5 6 7 8 9 10; do | ||||
| 		echo $i | ||||
| 	done >file && | ||||
| 	git add file && | ||||
| 	git commit -m base && | ||||
| 	git tag base && | ||||
| 	sed s/2/two/ <file >tmp && | ||||
| 	mv tmp file && | ||||
| 	git commit -a -m two && | ||||
| 	git tag two && | ||||
| 	git checkout -b other HEAD^ && | ||||
| 	sed s/10/ten/ <file >tmp && | ||||
| 	mv tmp file && | ||||
| 	git commit -a -m ten && | ||||
| 	git tag ten | ||||
| ' | ||||
|  | ||||
| cat >expect-merged <<'EOF' | ||||
| 1 | ||||
| two | ||||
| 3 | ||||
| 4 | ||||
| 5 | ||||
| 6 | ||||
| 7 | ||||
| 8 | ||||
| 9 | ||||
| ten | ||||
| EOF | ||||
|  | ||||
| test_expect_success 'read-tree does not resolve content merge' ' | ||||
| 	git read-tree -i -m base ten two && | ||||
| 	echo file >expect && | ||||
| 	git diff-files --name-only --diff-filter=U >unmerged && | ||||
| 	test_cmp expect unmerged | ||||
| ' | ||||
|  | ||||
| test_expect_success 'git merge-index git-merge-one-file resolves' ' | ||||
| 	git merge-index git-merge-one-file -a && | ||||
| 	git diff-files --name-only --diff-filter=U >unmerged && | ||||
| 	>expect && | ||||
| 	test_cmp expect unmerged && | ||||
| 	test_cmp expect-merged file && | ||||
| 	git cat-file blob :file >file-index && | ||||
| 	test_cmp expect-merged file-index | ||||
| ' | ||||
|  | ||||
| test_expect_success 'setup bare merge' ' | ||||
| 	git clone --bare . bare.git && | ||||
| 	(cd bare.git && | ||||
| 	 GIT_INDEX_FILE=$PWD/merge.index && | ||||
| 	 export GIT_INDEX_FILE && | ||||
| 	 git read-tree -i -m base ten two | ||||
| 	) | ||||
| ' | ||||
|  | ||||
| test_expect_success 'merge-one-file fails without a work tree' ' | ||||
| 	(cd bare.git && | ||||
| 	 GIT_INDEX_FILE=$PWD/merge.index && | ||||
| 	 export GIT_INDEX_FILE && | ||||
| 	 test_must_fail git merge-index git-merge-one-file -a | ||||
| 	) | ||||
| ' | ||||
|  | ||||
| test_expect_success 'merge-one-file respects GIT_WORK_TREE' ' | ||||
| 	(cd bare.git && | ||||
| 	 mkdir work && | ||||
| 	 GIT_WORK_TREE=$PWD/work && | ||||
| 	 export GIT_WORK_TREE && | ||||
| 	 GIT_INDEX_FILE=$PWD/merge.index && | ||||
| 	 export GIT_INDEX_FILE && | ||||
| 	 git merge-index git-merge-one-file -a && | ||||
| 	 git cat-file blob :file >work/file-index | ||||
| 	) && | ||||
| 	test_cmp expect-merged bare.git/work/file && | ||||
| 	test_cmp expect-merged bare.git/work/file-index | ||||
| ' | ||||
|  | ||||
| test_expect_success 'merge-one-file respects core.worktree' ' | ||||
| 	mkdir subdir && | ||||
| 	git clone . subdir/child && | ||||
| 	(cd subdir && | ||||
| 	 GIT_DIR=$PWD/child/.git && | ||||
| 	 export GIT_DIR && | ||||
| 	 git config core.worktree "$PWD/child" && | ||||
| 	 git read-tree -i -m base ten two && | ||||
| 	 git merge-index git-merge-one-file -a && | ||||
| 	 git cat-file blob :file >file-index | ||||
| 	) && | ||||
| 	test_cmp expect-merged subdir/child/file && | ||||
| 	test_cmp expect-merged subdir/file-index | ||||
| ' | ||||
|  | ||||
| test_done | ||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano