add tests for merge-index / merge-one-file

There were no tests for either, except a brief use in
t1200-tutorial.

These tools are not used much these days, as most people
use the merge-recursive strategy, which handles everything
internally. However, they are used by the "octopus" and
"resolve" strategies, as well as any custom strategies
or merge scripts people have built around them.

For example, together with read-tree, they are the simplest
way to do a basic content-level merge without checking out
the entire repository contents beforehand.

This script adds a basic test of the tools to perform one
content-level merge. It also shows a failure of the tools to
work properly in the face of GIT_WORK_TREE or core.worktree.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King 2011-04-29 18:23:54 -04:00 committed by Junio C Hamano
parent 547e8b9205
commit cf1af1b1f3

100
t/t6060-merge-index.sh Executable file
View File

@ -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_failure '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_failure '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