#!/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/ tmp && mv tmp file && git commit -a -m two && git tag two && git checkout -b other HEAD^ && sed s/10/ten/ 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