Merge branch 'sb/plug-transport-leak'
[git] / t / t6060-merge-index.sh
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_success '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_success '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