blob: 9b3fa2bdcd9bebae46a000ffe9c2059cea5a93fd [file] [log] [blame]
Junio C Hamano885b9812007-04-07 07:17:35 -07001#!/bin/sh
2
3test_description='merge-recursive backend test'
4
5. ./test-lib.sh
6
7test_expect_success 'setup 1' '
8
9 echo hello >a &&
10 o0=$(git hash-object a) &&
11 cp a b &&
Brian Gernhardt744747e2007-04-19 00:51:06 -040012 cp a c &&
Junio C Hamano885b9812007-04-07 07:17:35 -070013 mkdir d &&
14 cp a d/e &&
15
16 test_tick &&
Brian Gernhardt744747e2007-04-19 00:51:06 -040017 git add a b c d/e &&
Junio C Hamano885b9812007-04-07 07:17:35 -070018 git commit -m initial &&
19 c0=$(git rev-parse --verify HEAD) &&
20 git branch side &&
21 git branch df-1 &&
22 git branch df-2 &&
23 git branch df-3 &&
24 git branch remove &&
25
26 echo hello >>a &&
27 cp a d/e &&
28 o1=$(git hash-object a) &&
29
30 git add a d/e &&
31
32 test_tick &&
33 git commit -m "master modifies a and d/e" &&
34 c1=$(git rev-parse --verify HEAD) &&
35 ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
36 (
Junio C Hamano885b9812007-04-07 07:17:35 -070037 echo "100644 blob $o1 a"
38 echo "100644 blob $o0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -040039 echo "100644 blob $o0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -070040 echo "100644 blob $o1 d/e"
Junio C Hamano885b9812007-04-07 07:17:35 -070041 echo "100644 $o1 0 a"
42 echo "100644 $o0 0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -040043 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -070044 echo "100644 $o1 0 d/e"
45 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -070046 test_cmp expected actual
Junio C Hamano885b9812007-04-07 07:17:35 -070047'
48
49test_expect_success 'setup 2' '
50
Brian Gernhardt744747e2007-04-19 00:51:06 -040051 rm -rf [abcd] &&
Junio C Hamano885b9812007-04-07 07:17:35 -070052 git checkout side &&
53 ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
54 (
Junio C Hamano885b9812007-04-07 07:17:35 -070055 echo "100644 blob $o0 a"
56 echo "100644 blob $o0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -040057 echo "100644 blob $o0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -070058 echo "100644 blob $o0 d/e"
Junio C Hamano885b9812007-04-07 07:17:35 -070059 echo "100644 $o0 0 a"
60 echo "100644 $o0 0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -040061 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -070062 echo "100644 $o0 0 d/e"
63 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -070064 test_cmp expected actual &&
Junio C Hamano885b9812007-04-07 07:17:35 -070065
66 echo goodbye >>a &&
67 o2=$(git hash-object a) &&
68
69 git add a &&
70
71 test_tick &&
72 git commit -m "side modifies a" &&
73 c2=$(git rev-parse --verify HEAD) &&
74 ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
75 (
Junio C Hamano885b9812007-04-07 07:17:35 -070076 echo "100644 blob $o2 a"
77 echo "100644 blob $o0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -040078 echo "100644 blob $o0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -070079 echo "100644 blob $o0 d/e"
Junio C Hamano885b9812007-04-07 07:17:35 -070080 echo "100644 $o2 0 a"
81 echo "100644 $o0 0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -040082 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -070083 echo "100644 $o0 0 d/e"
84 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -070085 test_cmp expected actual
Junio C Hamano885b9812007-04-07 07:17:35 -070086'
87
88test_expect_success 'setup 3' '
89
Brian Gernhardt744747e2007-04-19 00:51:06 -040090 rm -rf [abcd] &&
Junio C Hamano885b9812007-04-07 07:17:35 -070091 git checkout df-1 &&
92 ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
93 (
Junio C Hamano885b9812007-04-07 07:17:35 -070094 echo "100644 blob $o0 a"
95 echo "100644 blob $o0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -040096 echo "100644 blob $o0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -070097 echo "100644 blob $o0 d/e"
Junio C Hamano885b9812007-04-07 07:17:35 -070098 echo "100644 $o0 0 a"
99 echo "100644 $o0 0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400100 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700101 echo "100644 $o0 0 d/e"
102 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700103 test_cmp expected actual &&
Junio C Hamano885b9812007-04-07 07:17:35 -0700104
105 rm -f b && mkdir b && echo df-1 >b/c && git add b/c &&
106 o3=$(git hash-object b/c) &&
107
108 test_tick &&
109 git commit -m "df-1 makes b/c" &&
110 c3=$(git rev-parse --verify HEAD) &&
111 ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
112 (
Junio C Hamano885b9812007-04-07 07:17:35 -0700113 echo "100644 blob $o0 a"
114 echo "100644 blob $o3 b/c"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400115 echo "100644 blob $o0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700116 echo "100644 blob $o0 d/e"
Junio C Hamano885b9812007-04-07 07:17:35 -0700117 echo "100644 $o0 0 a"
118 echo "100644 $o3 0 b/c"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400119 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700120 echo "100644 $o0 0 d/e"
121 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700122 test_cmp expected actual
Junio C Hamano885b9812007-04-07 07:17:35 -0700123'
124
125test_expect_success 'setup 4' '
126
Brian Gernhardt744747e2007-04-19 00:51:06 -0400127 rm -rf [abcd] &&
Junio C Hamano885b9812007-04-07 07:17:35 -0700128 git checkout df-2 &&
129 ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
130 (
Junio C Hamano885b9812007-04-07 07:17:35 -0700131 echo "100644 blob $o0 a"
132 echo "100644 blob $o0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400133 echo "100644 blob $o0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700134 echo "100644 blob $o0 d/e"
Junio C Hamano885b9812007-04-07 07:17:35 -0700135 echo "100644 $o0 0 a"
136 echo "100644 $o0 0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400137 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700138 echo "100644 $o0 0 d/e"
139 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700140 test_cmp expected actual &&
Junio C Hamano885b9812007-04-07 07:17:35 -0700141
142 rm -f a && mkdir a && echo df-2 >a/c && git add a/c &&
143 o4=$(git hash-object a/c) &&
144
145 test_tick &&
146 git commit -m "df-2 makes a/c" &&
147 c4=$(git rev-parse --verify HEAD) &&
148 ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
149 (
Junio C Hamano885b9812007-04-07 07:17:35 -0700150 echo "100644 blob $o4 a/c"
151 echo "100644 blob $o0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400152 echo "100644 blob $o0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700153 echo "100644 blob $o0 d/e"
Junio C Hamano885b9812007-04-07 07:17:35 -0700154 echo "100644 $o4 0 a/c"
155 echo "100644 $o0 0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400156 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700157 echo "100644 $o0 0 d/e"
158 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700159 test_cmp expected actual
Junio C Hamano885b9812007-04-07 07:17:35 -0700160'
161
162test_expect_success 'setup 5' '
163
Brian Gernhardt744747e2007-04-19 00:51:06 -0400164 rm -rf [abcd] &&
Junio C Hamano885b9812007-04-07 07:17:35 -0700165 git checkout remove &&
166 ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
167 (
Junio C Hamano885b9812007-04-07 07:17:35 -0700168 echo "100644 blob $o0 a"
169 echo "100644 blob $o0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400170 echo "100644 blob $o0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700171 echo "100644 blob $o0 d/e"
Junio C Hamano885b9812007-04-07 07:17:35 -0700172 echo "100644 $o0 0 a"
173 echo "100644 $o0 0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400174 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700175 echo "100644 $o0 0 d/e"
176 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700177 test_cmp expected actual &&
Junio C Hamano885b9812007-04-07 07:17:35 -0700178
179 rm -f b &&
180 echo remove-conflict >a &&
181
182 git add a &&
183 git rm b &&
184 o5=$(git hash-object a) &&
185
186 test_tick &&
187 git commit -m "remove removes b and modifies a" &&
188 c5=$(git rev-parse --verify HEAD) &&
189 ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
190 (
Junio C Hamano885b9812007-04-07 07:17:35 -0700191 echo "100644 blob $o5 a"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400192 echo "100644 blob $o0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700193 echo "100644 blob $o0 d/e"
Junio C Hamano885b9812007-04-07 07:17:35 -0700194 echo "100644 $o5 0 a"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400195 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700196 echo "100644 $o0 0 d/e"
197 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700198 test_cmp expected actual
Junio C Hamano885b9812007-04-07 07:17:35 -0700199
200'
201
202test_expect_success 'setup 6' '
203
Brian Gernhardt744747e2007-04-19 00:51:06 -0400204 rm -rf [abcd] &&
Junio C Hamano885b9812007-04-07 07:17:35 -0700205 git checkout df-3 &&
206 ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
207 (
Junio C Hamano885b9812007-04-07 07:17:35 -0700208 echo "100644 blob $o0 a"
209 echo "100644 blob $o0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400210 echo "100644 blob $o0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700211 echo "100644 blob $o0 d/e"
Junio C Hamano885b9812007-04-07 07:17:35 -0700212 echo "100644 $o0 0 a"
213 echo "100644 $o0 0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400214 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700215 echo "100644 $o0 0 d/e"
216 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700217 test_cmp expected actual &&
Junio C Hamano885b9812007-04-07 07:17:35 -0700218
219 rm -fr d && echo df-3 >d && git add d &&
220 o6=$(git hash-object d) &&
221
222 test_tick &&
223 git commit -m "df-3 makes d" &&
224 c6=$(git rev-parse --verify HEAD) &&
225 ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
226 (
Junio C Hamano885b9812007-04-07 07:17:35 -0700227 echo "100644 blob $o0 a"
228 echo "100644 blob $o0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400229 echo "100644 blob $o0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700230 echo "100644 blob $o6 d"
Junio C Hamano885b9812007-04-07 07:17:35 -0700231 echo "100644 $o0 0 a"
232 echo "100644 $o0 0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400233 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700234 echo "100644 $o6 0 d"
235 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700236 test_cmp expected actual
Junio C Hamano885b9812007-04-07 07:17:35 -0700237'
238
239test_expect_success 'merge-recursive simple' '
240
Brian Gernhardt744747e2007-04-19 00:51:06 -0400241 rm -fr [abcd] &&
Junio C Hamano885b9812007-04-07 07:17:35 -0700242 git checkout -f "$c2" &&
243
Nanako Shiraishi0cb0e142008-09-03 17:59:27 +0900244 git merge-recursive "$c0" -- "$c2" "$c1"
Junio C Hamano885b9812007-04-07 07:17:35 -0700245 status=$?
246 case "$status" in
247 1)
248 : happy
249 ;;
250 *)
251 echo >&2 "why status $status!!!"
252 false
253 ;;
254 esac
255'
256
257test_expect_success 'merge-recursive result' '
258
259 git ls-files -s >actual &&
260 (
Junio C Hamano885b9812007-04-07 07:17:35 -0700261 echo "100644 $o0 1 a"
262 echo "100644 $o2 2 a"
263 echo "100644 $o1 3 a"
264 echo "100644 $o0 0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400265 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700266 echo "100644 $o1 0 d/e"
267 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700268 test_cmp expected actual
Junio C Hamano885b9812007-04-07 07:17:35 -0700269
270'
271
Junio C Hamano446247d2008-08-23 12:56:57 -0700272test_expect_success 'fail if the index has unresolved entries' '
273
274 rm -fr [abcd] &&
275 git checkout -f "$c1" &&
276
277 test_must_fail git merge "$c5" &&
278 test_must_fail git merge "$c5" 2> out &&
Clemens Buchacherc8c562a2009-06-01 11:20:56 +0200279 grep "You have not concluded your merge" out &&
280 rm -f .git/MERGE_HEAD &&
281 test_must_fail git merge "$c5" 2> out &&
Junio C Hamano446247d2008-08-23 12:56:57 -0700282 grep "You are in the middle of a conflicted merge" out
283
284'
285
Junio C Hamano885b9812007-04-07 07:17:35 -0700286test_expect_success 'merge-recursive remove conflict' '
287
Brian Gernhardt744747e2007-04-19 00:51:06 -0400288 rm -fr [abcd] &&
Junio C Hamano885b9812007-04-07 07:17:35 -0700289 git checkout -f "$c1" &&
290
Nanako Shiraishi0cb0e142008-09-03 17:59:27 +0900291 git merge-recursive "$c0" -- "$c1" "$c5"
Junio C Hamano885b9812007-04-07 07:17:35 -0700292 status=$?
293 case "$status" in
294 1)
295 : happy
296 ;;
297 *)
298 echo >&2 "why status $status!!!"
299 false
300 ;;
301 esac
302'
303
304test_expect_success 'merge-recursive remove conflict' '
305
306 git ls-files -s >actual &&
307 (
Junio C Hamano885b9812007-04-07 07:17:35 -0700308 echo "100644 $o0 1 a"
309 echo "100644 $o1 2 a"
310 echo "100644 $o5 3 a"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400311 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700312 echo "100644 $o1 0 d/e"
313 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700314 test_cmp expected actual
Junio C Hamano885b9812007-04-07 07:17:35 -0700315
316'
317
318test_expect_success 'merge-recursive d/f simple' '
Brian Gernhardt744747e2007-04-19 00:51:06 -0400319 rm -fr [abcd] &&
Junio C Hamano885b9812007-04-07 07:17:35 -0700320 git reset --hard &&
321 git checkout -f "$c1" &&
322
Nanako Shiraishi0cb0e142008-09-03 17:59:27 +0900323 git merge-recursive "$c0" -- "$c1" "$c3"
Junio C Hamano885b9812007-04-07 07:17:35 -0700324'
325
326test_expect_success 'merge-recursive result' '
327
328 git ls-files -s >actual &&
329 (
Junio C Hamano885b9812007-04-07 07:17:35 -0700330 echo "100644 $o1 0 a"
331 echo "100644 $o3 0 b/c"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400332 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700333 echo "100644 $o1 0 d/e"
334 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700335 test_cmp expected actual
Junio C Hamano885b9812007-04-07 07:17:35 -0700336
337'
338
339test_expect_success 'merge-recursive d/f conflict' '
340
Brian Gernhardt744747e2007-04-19 00:51:06 -0400341 rm -fr [abcd] &&
Junio C Hamano885b9812007-04-07 07:17:35 -0700342 git reset --hard &&
343 git checkout -f "$c1" &&
344
Nanako Shiraishi0cb0e142008-09-03 17:59:27 +0900345 git merge-recursive "$c0" -- "$c1" "$c4"
Junio C Hamano885b9812007-04-07 07:17:35 -0700346 status=$?
347 case "$status" in
348 1)
349 : happy
350 ;;
351 *)
352 echo >&2 "why status $status!!!"
353 false
354 ;;
355 esac
356'
357
358test_expect_success 'merge-recursive d/f conflict result' '
359
360 git ls-files -s >actual &&
361 (
Junio C Hamano885b9812007-04-07 07:17:35 -0700362 echo "100644 $o0 1 a"
363 echo "100644 $o1 2 a"
364 echo "100644 $o4 0 a/c"
365 echo "100644 $o0 0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400366 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700367 echo "100644 $o1 0 d/e"
368 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700369 test_cmp expected actual
Junio C Hamano885b9812007-04-07 07:17:35 -0700370
371'
372
373test_expect_success 'merge-recursive d/f conflict the other way' '
374
Brian Gernhardt744747e2007-04-19 00:51:06 -0400375 rm -fr [abcd] &&
Junio C Hamano885b9812007-04-07 07:17:35 -0700376 git reset --hard &&
377 git checkout -f "$c4" &&
378
Nanako Shiraishi0cb0e142008-09-03 17:59:27 +0900379 git merge-recursive "$c0" -- "$c4" "$c1"
Junio C Hamano885b9812007-04-07 07:17:35 -0700380 status=$?
381 case "$status" in
382 1)
383 : happy
384 ;;
385 *)
386 echo >&2 "why status $status!!!"
387 false
388 ;;
389 esac
390'
391
392test_expect_success 'merge-recursive d/f conflict result the other way' '
393
394 git ls-files -s >actual &&
395 (
Junio C Hamano885b9812007-04-07 07:17:35 -0700396 echo "100644 $o0 1 a"
397 echo "100644 $o1 3 a"
398 echo "100644 $o4 0 a/c"
399 echo "100644 $o0 0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400400 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700401 echo "100644 $o1 0 d/e"
402 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700403 test_cmp expected actual
Junio C Hamano885b9812007-04-07 07:17:35 -0700404
405'
406
407test_expect_success 'merge-recursive d/f conflict' '
408
Brian Gernhardt744747e2007-04-19 00:51:06 -0400409 rm -fr [abcd] &&
Junio C Hamano885b9812007-04-07 07:17:35 -0700410 git reset --hard &&
411 git checkout -f "$c1" &&
412
Nanako Shiraishi0cb0e142008-09-03 17:59:27 +0900413 git merge-recursive "$c0" -- "$c1" "$c6"
Junio C Hamano885b9812007-04-07 07:17:35 -0700414 status=$?
415 case "$status" in
416 1)
417 : happy
418 ;;
419 *)
420 echo >&2 "why status $status!!!"
421 false
422 ;;
423 esac
424'
425
426test_expect_success 'merge-recursive d/f conflict result' '
427
428 git ls-files -s >actual &&
429 (
Junio C Hamano885b9812007-04-07 07:17:35 -0700430 echo "100644 $o1 0 a"
431 echo "100644 $o0 0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400432 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700433 echo "100644 $o6 3 d"
434 echo "100644 $o0 1 d/e"
435 echo "100644 $o1 2 d/e"
436 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700437 test_cmp expected actual
Junio C Hamano885b9812007-04-07 07:17:35 -0700438
439'
440
441test_expect_success 'merge-recursive d/f conflict' '
442
Brian Gernhardt744747e2007-04-19 00:51:06 -0400443 rm -fr [abcd] &&
Junio C Hamano885b9812007-04-07 07:17:35 -0700444 git reset --hard &&
445 git checkout -f "$c6" &&
446
Nanako Shiraishi0cb0e142008-09-03 17:59:27 +0900447 git merge-recursive "$c0" -- "$c6" "$c1"
Junio C Hamano885b9812007-04-07 07:17:35 -0700448 status=$?
449 case "$status" in
450 1)
451 : happy
452 ;;
453 *)
454 echo >&2 "why status $status!!!"
455 false
456 ;;
457 esac
458'
459
460test_expect_success 'merge-recursive d/f conflict result' '
461
462 git ls-files -s >actual &&
463 (
Junio C Hamano885b9812007-04-07 07:17:35 -0700464 echo "100644 $o1 0 a"
465 echo "100644 $o0 0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400466 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700467 echo "100644 $o6 2 d"
468 echo "100644 $o0 1 d/e"
469 echo "100644 $o1 3 d/e"
470 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700471 test_cmp expected actual
Junio C Hamano885b9812007-04-07 07:17:35 -0700472
473'
474
475test_expect_success 'reset and 3-way merge' '
476
477 git reset --hard "$c2" &&
478 git read-tree -m "$c0" "$c2" "$c1"
479
480'
481
482test_expect_success 'reset and bind merge' '
483
484 git reset --hard master &&
485 git read-tree --prefix=M/ master &&
486 git ls-files -s >actual &&
487 (
Junio C Hamano885b9812007-04-07 07:17:35 -0700488 echo "100644 $o1 0 M/a"
489 echo "100644 $o0 0 M/b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400490 echo "100644 $o0 0 M/c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700491 echo "100644 $o1 0 M/d/e"
492 echo "100644 $o1 0 a"
493 echo "100644 $o0 0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400494 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700495 echo "100644 $o1 0 d/e"
496 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700497 test_cmp expected actual &&
Junio C Hamano885b9812007-04-07 07:17:35 -0700498
499 git read-tree --prefix=a1/ master &&
500 git ls-files -s >actual &&
501 (
Junio C Hamano885b9812007-04-07 07:17:35 -0700502 echo "100644 $o1 0 M/a"
503 echo "100644 $o0 0 M/b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400504 echo "100644 $o0 0 M/c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700505 echo "100644 $o1 0 M/d/e"
506 echo "100644 $o1 0 a"
Junio C Hamano885b9812007-04-07 07:17:35 -0700507 echo "100644 $o1 0 a1/a"
508 echo "100644 $o0 0 a1/b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400509 echo "100644 $o0 0 a1/c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700510 echo "100644 $o1 0 a1/d/e"
511 echo "100644 $o0 0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400512 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700513 echo "100644 $o1 0 d/e"
514 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700515 test_cmp expected actual
Junio C Hamano885b9812007-04-07 07:17:35 -0700516
517 git read-tree --prefix=z/ master &&
518 git ls-files -s >actual &&
519 (
Junio C Hamano885b9812007-04-07 07:17:35 -0700520 echo "100644 $o1 0 M/a"
521 echo "100644 $o0 0 M/b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400522 echo "100644 $o0 0 M/c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700523 echo "100644 $o1 0 M/d/e"
524 echo "100644 $o1 0 a"
Junio C Hamano885b9812007-04-07 07:17:35 -0700525 echo "100644 $o1 0 a1/a"
526 echo "100644 $o0 0 a1/b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400527 echo "100644 $o0 0 a1/c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700528 echo "100644 $o1 0 a1/d/e"
529 echo "100644 $o0 0 b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400530 echo "100644 $o0 0 c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700531 echo "100644 $o1 0 d/e"
Junio C Hamano885b9812007-04-07 07:17:35 -0700532 echo "100644 $o1 0 z/a"
533 echo "100644 $o0 0 z/b"
Brian Gernhardt744747e2007-04-19 00:51:06 -0400534 echo "100644 $o0 0 z/c"
Junio C Hamano885b9812007-04-07 07:17:35 -0700535 echo "100644 $o1 0 z/d/e"
536 ) >expected &&
Junio C Hamano3af82862008-05-23 22:28:56 -0700537 test_cmp expected actual
Junio C Hamano885b9812007-04-07 07:17:35 -0700538
539'
540
Alex Riesen41f13af2008-09-25 22:12:45 +0200541test_expect_success 'merge removes empty directories' '
542
543 git reset --hard master &&
544 git checkout -b rm &&
545 git rm d/e &&
546 git commit -mremoved-d/e &&
547 git checkout master &&
548 git merge -s recursive rm &&
549 test_must_fail test -d d
550'
551
Junio C Hamano885b9812007-04-07 07:17:35 -0700552test_done