Merge branch 'nd/init-core-worktree-in-multi-worktree-world'
[git] / t / t6044-merge-unrelated-index-changes.sh
1 #!/bin/sh
2
3 test_description="merges with unrelated index changes"
4
5 . ./test-lib.sh
6
7 # Testcase for some simple merges
8 #   A
9 #   o-----o B
10 #    \
11 #     \---o C
12 #      \
13 #       \-o D
14 #        \
15 #         o E
16 #   Commit A: some file a
17 #   Commit B: adds file b, modifies end of a
18 #   Commit C: adds file c
19 #   Commit D: adds file d, modifies beginning of a
20 #   Commit E: renames a->subdir/a, adds subdir/e
21
22 test_expect_success 'setup trivial merges' '
23         test_seq 1 10 >a &&
24         git add a &&
25         test_tick && git commit -m A &&
26
27         git branch A &&
28         git branch B &&
29         git branch C &&
30         git branch D &&
31         git branch E &&
32
33         git checkout B &&
34         echo b >b &&
35         echo 11 >>a &&
36         git add a b &&
37         test_tick && git commit -m B &&
38
39         git checkout C &&
40         echo c >c &&
41         git add c &&
42         test_tick && git commit -m C &&
43
44         git checkout D &&
45         test_seq 2 10 >a &&
46         echo d >d &&
47         git add a d &&
48         test_tick && git commit -m D &&
49
50         git checkout E &&
51         mkdir subdir &&
52         git mv a subdir/a &&
53         echo e >subdir/e &&
54         git add subdir &&
55         test_tick && git commit -m E
56 '
57
58 test_expect_success 'ff update' '
59         git reset --hard &&
60         git checkout A^0 &&
61
62         touch random_file && git add random_file &&
63
64         git merge E^0 &&
65
66         test_must_fail git rev-parse HEAD:random_file &&
67         test "$(git diff --name-only --cached E)" = "random_file"
68 '
69
70 test_expect_success 'ff update, important file modified' '
71         git reset --hard &&
72         git checkout A^0 &&
73
74         mkdir subdir &&
75         touch subdir/e &&
76         git add subdir/e &&
77
78         test_must_fail git merge E^0
79 '
80
81 test_expect_success 'resolve, trivial' '
82         git reset --hard &&
83         git checkout B^0 &&
84
85         touch random_file && git add random_file &&
86
87         test_must_fail git merge -s resolve C^0
88 '
89
90 test_expect_success 'resolve, non-trivial' '
91         git reset --hard &&
92         git checkout B^0 &&
93
94         touch random_file && git add random_file &&
95
96         test_must_fail git merge -s resolve D^0
97 '
98
99 test_expect_success 'recursive' '
100         git reset --hard &&
101         git checkout B^0 &&
102
103         touch random_file && git add random_file &&
104
105         test_must_fail git merge -s recursive C^0
106 '
107
108 test_expect_success 'octopus, unrelated file touched' '
109         git reset --hard &&
110         git checkout B^0 &&
111
112         touch random_file && git add random_file &&
113
114         test_must_fail git merge C^0 D^0
115 '
116
117 test_expect_success 'octopus, related file removed' '
118         git reset --hard &&
119         git checkout B^0 &&
120
121         git rm b &&
122
123         test_must_fail git merge C^0 D^0
124 '
125
126 test_expect_success 'octopus, related file modified' '
127         git reset --hard &&
128         git checkout B^0 &&
129
130         echo 12 >>a && git add a &&
131
132         test_must_fail git merge C^0 D^0
133 '
134
135 test_expect_success 'ours' '
136         git reset --hard &&
137         git checkout B^0 &&
138
139         touch random_file && git add random_file &&
140
141         test_must_fail git merge -s ours C^0
142 '
143
144 test_expect_success 'subtree' '
145         git reset --hard &&
146         git checkout B^0 &&
147
148         touch random_file && git add random_file &&
149
150         test_must_fail git merge -s subtree E^0
151 '
152
153 test_done