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