@matheusbsbs / matheus-bagliano / commits / cf1af1b1f3
Fork 0

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>

Jeff King committed Apr 29, 2011 at 18:23 UTC cf1af1b1f3ddd2554f64aae120635952801a9632
1 file changed +100
t/t6060-merge-index.sh new
+100
@@ -0,0 +1,100 @@
1 +#!/bin/sh
2 +
3 +test_description='basic git merge-index / git-merge-one-file tests'
4 +. ./test-lib.sh
5 +
6 +test_expect_success 'setup diverging branches' '
7 + for i in 1 2 3 4 5 6 7 8 9 10; do
8 + echo $i
9 + done >file &&
10 + git add file &&
11 + git commit -m base &&
12 + git tag base &&
13 + sed s/2/two/ <file >tmp &&
14 + mv tmp file &&
15 + git commit -a -m two &&
16 + git tag two &&
17 + git checkout -b other HEAD^ &&
18 + sed s/10/ten/ <file >tmp &&
19 + mv tmp file &&
20 + git commit -a -m ten &&
21 + git tag ten
22 +'
23 +
24 +cat >expect-merged <<'EOF'
25 +1
26 +two
27 +3
28 +4
29 +5
30 +6
31 +7
32 +8
33 +9
34 +ten
35 +EOF
36 +
37 +test_expect_success 'read-tree does not resolve content merge' '
38 + git read-tree -i -m base ten two &&
39 + echo file >expect &&
40 + git diff-files --name-only --diff-filter=U >unmerged &&
41 + test_cmp expect unmerged
42 +'
43 +
44 +test_expect_success 'git merge-index git-merge-one-file resolves' '
45 + git merge-index git-merge-one-file -a &&
46 + git diff-files --name-only --diff-filter=U >unmerged &&
47 + >expect &&
48 + test_cmp expect unmerged &&
49 + test_cmp expect-merged file &&
50 + git cat-file blob :file >file-index &&
51 + test_cmp expect-merged file-index
52 +'
53 +
54 +test_expect_success 'setup bare merge' '
55 + git clone --bare . bare.git &&
56 + (cd bare.git &&
57 + GIT_INDEX_FILE=$PWD/merge.index &&
58 + export GIT_INDEX_FILE &&
59 + git read-tree -i -m base ten two
60 + )
61 +'
62 +
63 +test_expect_success 'merge-one-file fails without a work tree' '
64 + (cd bare.git &&
65 + GIT_INDEX_FILE=$PWD/merge.index &&
66 + export GIT_INDEX_FILE &&
67 + test_must_fail git merge-index git-merge-one-file -a
68 + )
69 +'
70 +
71 +test_expect_failure 'merge-one-file respects GIT_WORK_TREE' '
72 + (cd bare.git &&
73 + mkdir work &&
74 + GIT_WORK_TREE=$PWD/work &&
75 + export GIT_WORK_TREE &&
76 + GIT_INDEX_FILE=$PWD/merge.index &&
77 + export GIT_INDEX_FILE &&
78 + git merge-index git-merge-one-file -a &&
79 + git cat-file blob :file >work/file-index
80 + ) &&
81 + test_cmp expect-merged bare.git/work/file &&
82 + test_cmp expect-merged bare.git/work/file-index
83 +'
84 +
85 +test_expect_failure 'merge-one-file respects core.worktree' '
86 + mkdir subdir &&
87 + git clone . subdir/child &&
88 + (cd subdir &&
89 + GIT_DIR=$PWD/child/.git &&
90 + export GIT_DIR &&
91 + git config core.worktree "$PWD/child" &&
92 + git read-tree -i -m base ten two &&
93 + git merge-index git-merge-one-file -a &&
94 + git cat-file blob :file >file-index
95 + ) &&
96 + test_cmp expect-merged subdir/child/file &&
97 + test_cmp expect-merged subdir/file-index
98 +'
99 +
100 +test_done