]> git.ipfire.org Git - thirdparty/git.git/blame - t/t3030-merge-recursive.sh
Makefile: default pager on AIX to "more"
[thirdparty/git.git] / t / t3030-merge-recursive.sh
CommitLineData
885b9810
JH
1#!/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 &&
744747ef 12 cp a c &&
885b9810
JH
13 mkdir d &&
14 cp a d/e &&
15
16 test_tick &&
744747ef 17 git add a b c d/e &&
885b9810
JH
18 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 (
885b9810
JH
37 echo "100644 blob $o1 a"
38 echo "100644 blob $o0 b"
744747ef 39 echo "100644 blob $o0 c"
885b9810 40 echo "100644 blob $o1 d/e"
885b9810
JH
41 echo "100644 $o1 0 a"
42 echo "100644 $o0 0 b"
744747ef 43 echo "100644 $o0 0 c"
885b9810
JH
44 echo "100644 $o1 0 d/e"
45 ) >expected &&
3af82863 46 test_cmp expected actual
885b9810
JH
47'
48
49test_expect_success 'setup 2' '
50
744747ef 51 rm -rf [abcd] &&
885b9810
JH
52 git checkout side &&
53 ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
54 (
885b9810
JH
55 echo "100644 blob $o0 a"
56 echo "100644 blob $o0 b"
744747ef 57 echo "100644 blob $o0 c"
885b9810 58 echo "100644 blob $o0 d/e"
885b9810
JH
59 echo "100644 $o0 0 a"
60 echo "100644 $o0 0 b"
744747ef 61 echo "100644 $o0 0 c"
885b9810
JH
62 echo "100644 $o0 0 d/e"
63 ) >expected &&
3af82863 64 test_cmp expected actual &&
885b9810
JH
65
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 (
885b9810
JH
76 echo "100644 blob $o2 a"
77 echo "100644 blob $o0 b"
744747ef 78 echo "100644 blob $o0 c"
885b9810 79 echo "100644 blob $o0 d/e"
885b9810
JH
80 echo "100644 $o2 0 a"
81 echo "100644 $o0 0 b"
744747ef 82 echo "100644 $o0 0 c"
885b9810
JH
83 echo "100644 $o0 0 d/e"
84 ) >expected &&
3af82863 85 test_cmp expected actual
885b9810
JH
86'
87
88test_expect_success 'setup 3' '
89
744747ef 90 rm -rf [abcd] &&
885b9810
JH
91 git checkout df-1 &&
92 ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
93 (
885b9810
JH
94 echo "100644 blob $o0 a"
95 echo "100644 blob $o0 b"
744747ef 96 echo "100644 blob $o0 c"
885b9810 97 echo "100644 blob $o0 d/e"
885b9810
JH
98 echo "100644 $o0 0 a"
99 echo "100644 $o0 0 b"
744747ef 100 echo "100644 $o0 0 c"
885b9810
JH
101 echo "100644 $o0 0 d/e"
102 ) >expected &&
3af82863 103 test_cmp expected actual &&
885b9810
JH
104
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 (
885b9810
JH
113 echo "100644 blob $o0 a"
114 echo "100644 blob $o3 b/c"
744747ef 115 echo "100644 blob $o0 c"
885b9810 116 echo "100644 blob $o0 d/e"
885b9810
JH
117 echo "100644 $o0 0 a"
118 echo "100644 $o3 0 b/c"
744747ef 119 echo "100644 $o0 0 c"
885b9810
JH
120 echo "100644 $o0 0 d/e"
121 ) >expected &&
3af82863 122 test_cmp expected actual
885b9810
JH
123'
124
125test_expect_success 'setup 4' '
126
744747ef 127 rm -rf [abcd] &&
885b9810
JH
128 git checkout df-2 &&
129 ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
130 (
885b9810
JH
131 echo "100644 blob $o0 a"
132 echo "100644 blob $o0 b"
744747ef 133 echo "100644 blob $o0 c"
885b9810 134 echo "100644 blob $o0 d/e"
885b9810
JH
135 echo "100644 $o0 0 a"
136 echo "100644 $o0 0 b"
744747ef 137 echo "100644 $o0 0 c"
885b9810
JH
138 echo "100644 $o0 0 d/e"
139 ) >expected &&
3af82863 140 test_cmp expected actual &&
885b9810
JH
141
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 (
885b9810
JH
150 echo "100644 blob $o4 a/c"
151 echo "100644 blob $o0 b"
744747ef 152 echo "100644 blob $o0 c"
885b9810 153 echo "100644 blob $o0 d/e"
885b9810
JH
154 echo "100644 $o4 0 a/c"
155 echo "100644 $o0 0 b"
744747ef 156 echo "100644 $o0 0 c"
885b9810
JH
157 echo "100644 $o0 0 d/e"
158 ) >expected &&
3af82863 159 test_cmp expected actual
885b9810
JH
160'
161
162test_expect_success 'setup 5' '
163
744747ef 164 rm -rf [abcd] &&
885b9810
JH
165 git checkout remove &&
166 ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
167 (
885b9810
JH
168 echo "100644 blob $o0 a"
169 echo "100644 blob $o0 b"
744747ef 170 echo "100644 blob $o0 c"
885b9810 171 echo "100644 blob $o0 d/e"
885b9810
JH
172 echo "100644 $o0 0 a"
173 echo "100644 $o0 0 b"
744747ef 174 echo "100644 $o0 0 c"
885b9810
JH
175 echo "100644 $o0 0 d/e"
176 ) >expected &&
3af82863 177 test_cmp expected actual &&
885b9810
JH
178
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 (
885b9810 191 echo "100644 blob $o5 a"
744747ef 192 echo "100644 blob $o0 c"
885b9810 193 echo "100644 blob $o0 d/e"
885b9810 194 echo "100644 $o5 0 a"
744747ef 195 echo "100644 $o0 0 c"
885b9810
JH
196 echo "100644 $o0 0 d/e"
197 ) >expected &&
3af82863 198 test_cmp expected actual
885b9810
JH
199
200'
201
202test_expect_success 'setup 6' '
203
744747ef 204 rm -rf [abcd] &&
885b9810
JH
205 git checkout df-3 &&
206 ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
207 (
885b9810
JH
208 echo "100644 blob $o0 a"
209 echo "100644 blob $o0 b"
744747ef 210 echo "100644 blob $o0 c"
885b9810 211 echo "100644 blob $o0 d/e"
885b9810
JH
212 echo "100644 $o0 0 a"
213 echo "100644 $o0 0 b"
744747ef 214 echo "100644 $o0 0 c"
885b9810
JH
215 echo "100644 $o0 0 d/e"
216 ) >expected &&
3af82863 217 test_cmp expected actual &&
885b9810
JH
218
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 (
885b9810
JH
227 echo "100644 blob $o0 a"
228 echo "100644 blob $o0 b"
744747ef 229 echo "100644 blob $o0 c"
885b9810 230 echo "100644 blob $o6 d"
885b9810
JH
231 echo "100644 $o0 0 a"
232 echo "100644 $o0 0 b"
744747ef 233 echo "100644 $o0 0 c"
885b9810
JH
234 echo "100644 $o6 0 d"
235 ) >expected &&
3af82863 236 test_cmp expected actual
885b9810
JH
237'
238
239test_expect_success 'merge-recursive simple' '
240
744747ef 241 rm -fr [abcd] &&
885b9810
JH
242 git checkout -f "$c2" &&
243
0cb0e143 244 git merge-recursive "$c0" -- "$c2" "$c1"
885b9810
JH
245 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 (
885b9810
JH
261 echo "100644 $o0 1 a"
262 echo "100644 $o2 2 a"
263 echo "100644 $o1 3 a"
264 echo "100644 $o0 0 b"
744747ef 265 echo "100644 $o0 0 c"
885b9810
JH
266 echo "100644 $o1 0 d/e"
267 ) >expected &&
3af82863 268 test_cmp expected actual
885b9810
JH
269
270'
271
446247db
JH
272test_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 &&
d38a30df
MM
279 grep "not possible because you have unmerged files" out &&
280 git add -u &&
281 test_must_fail git merge "$c5" 2> out &&
c8c562a2
CB
282 grep "You have not concluded your merge" out &&
283 rm -f .git/MERGE_HEAD &&
284 test_must_fail git merge "$c5" 2> out &&
d38a30df 285 grep "Your local changes to .* would be overwritten by merge." out
446247db
JH
286'
287
885b9810
JH
288test_expect_success 'merge-recursive remove conflict' '
289
744747ef 290 rm -fr [abcd] &&
885b9810
JH
291 git checkout -f "$c1" &&
292
0cb0e143 293 git merge-recursive "$c0" -- "$c1" "$c5"
885b9810
JH
294 status=$?
295 case "$status" in
296 1)
297 : happy
298 ;;
299 *)
300 echo >&2 "why status $status!!!"
301 false
302 ;;
303 esac
304'
305
306test_expect_success 'merge-recursive remove conflict' '
307
308 git ls-files -s >actual &&
309 (
885b9810
JH
310 echo "100644 $o0 1 a"
311 echo "100644 $o1 2 a"
312 echo "100644 $o5 3 a"
744747ef 313 echo "100644 $o0 0 c"
885b9810
JH
314 echo "100644 $o1 0 d/e"
315 ) >expected &&
3af82863 316 test_cmp expected actual
885b9810
JH
317
318'
319
320test_expect_success 'merge-recursive d/f simple' '
744747ef 321 rm -fr [abcd] &&
885b9810
JH
322 git reset --hard &&
323 git checkout -f "$c1" &&
324
0cb0e143 325 git merge-recursive "$c0" -- "$c1" "$c3"
885b9810
JH
326'
327
328test_expect_success 'merge-recursive result' '
329
330 git ls-files -s >actual &&
331 (
885b9810
JH
332 echo "100644 $o1 0 a"
333 echo "100644 $o3 0 b/c"
744747ef 334 echo "100644 $o0 0 c"
885b9810
JH
335 echo "100644 $o1 0 d/e"
336 ) >expected &&
3af82863 337 test_cmp expected actual
885b9810
JH
338
339'
340
341test_expect_success 'merge-recursive d/f conflict' '
342
744747ef 343 rm -fr [abcd] &&
885b9810
JH
344 git reset --hard &&
345 git checkout -f "$c1" &&
346
0cb0e143 347 git merge-recursive "$c0" -- "$c1" "$c4"
885b9810
JH
348 status=$?
349 case "$status" in
350 1)
351 : happy
352 ;;
353 *)
354 echo >&2 "why status $status!!!"
355 false
356 ;;
357 esac
358'
359
360test_expect_success 'merge-recursive d/f conflict result' '
361
362 git ls-files -s >actual &&
363 (
885b9810
JH
364 echo "100644 $o0 1 a"
365 echo "100644 $o1 2 a"
366 echo "100644 $o4 0 a/c"
367 echo "100644 $o0 0 b"
744747ef 368 echo "100644 $o0 0 c"
885b9810
JH
369 echo "100644 $o1 0 d/e"
370 ) >expected &&
3af82863 371 test_cmp expected actual
885b9810
JH
372
373'
374
375test_expect_success 'merge-recursive d/f conflict the other way' '
376
744747ef 377 rm -fr [abcd] &&
885b9810
JH
378 git reset --hard &&
379 git checkout -f "$c4" &&
380
0cb0e143 381 git merge-recursive "$c0" -- "$c4" "$c1"
885b9810
JH
382 status=$?
383 case "$status" in
384 1)
385 : happy
386 ;;
387 *)
388 echo >&2 "why status $status!!!"
389 false
390 ;;
391 esac
392'
393
394test_expect_success 'merge-recursive d/f conflict result the other way' '
395
396 git ls-files -s >actual &&
397 (
885b9810
JH
398 echo "100644 $o0 1 a"
399 echo "100644 $o1 3 a"
400 echo "100644 $o4 0 a/c"
401 echo "100644 $o0 0 b"
744747ef 402 echo "100644 $o0 0 c"
885b9810
JH
403 echo "100644 $o1 0 d/e"
404 ) >expected &&
3af82863 405 test_cmp expected actual
885b9810
JH
406
407'
408
409test_expect_success 'merge-recursive d/f conflict' '
410
744747ef 411 rm -fr [abcd] &&
885b9810
JH
412 git reset --hard &&
413 git checkout -f "$c1" &&
414
0cb0e143 415 git merge-recursive "$c0" -- "$c1" "$c6"
885b9810
JH
416 status=$?
417 case "$status" in
418 1)
419 : happy
420 ;;
421 *)
422 echo >&2 "why status $status!!!"
423 false
424 ;;
425 esac
426'
427
428test_expect_success 'merge-recursive d/f conflict result' '
429
430 git ls-files -s >actual &&
431 (
885b9810
JH
432 echo "100644 $o1 0 a"
433 echo "100644 $o0 0 b"
744747ef 434 echo "100644 $o0 0 c"
885b9810
JH
435 echo "100644 $o6 3 d"
436 echo "100644 $o0 1 d/e"
437 echo "100644 $o1 2 d/e"
438 ) >expected &&
3af82863 439 test_cmp expected actual
885b9810
JH
440
441'
442
443test_expect_success 'merge-recursive d/f conflict' '
444
744747ef 445 rm -fr [abcd] &&
885b9810
JH
446 git reset --hard &&
447 git checkout -f "$c6" &&
448
0cb0e143 449 git merge-recursive "$c0" -- "$c6" "$c1"
885b9810
JH
450 status=$?
451 case "$status" in
452 1)
453 : happy
454 ;;
455 *)
456 echo >&2 "why status $status!!!"
457 false
458 ;;
459 esac
460'
461
462test_expect_success 'merge-recursive d/f conflict result' '
463
464 git ls-files -s >actual &&
465 (
885b9810
JH
466 echo "100644 $o1 0 a"
467 echo "100644 $o0 0 b"
744747ef 468 echo "100644 $o0 0 c"
885b9810
JH
469 echo "100644 $o6 2 d"
470 echo "100644 $o0 1 d/e"
471 echo "100644 $o1 3 d/e"
472 ) >expected &&
3af82863 473 test_cmp expected actual
885b9810
JH
474
475'
476
477test_expect_success 'reset and 3-way merge' '
478
479 git reset --hard "$c2" &&
480 git read-tree -m "$c0" "$c2" "$c1"
481
482'
483
484test_expect_success 'reset and bind merge' '
485
486 git reset --hard master &&
487 git read-tree --prefix=M/ master &&
488 git ls-files -s >actual &&
489 (
885b9810
JH
490 echo "100644 $o1 0 M/a"
491 echo "100644 $o0 0 M/b"
744747ef 492 echo "100644 $o0 0 M/c"
885b9810
JH
493 echo "100644 $o1 0 M/d/e"
494 echo "100644 $o1 0 a"
495 echo "100644 $o0 0 b"
744747ef 496 echo "100644 $o0 0 c"
885b9810
JH
497 echo "100644 $o1 0 d/e"
498 ) >expected &&
3af82863 499 test_cmp expected actual &&
885b9810
JH
500
501 git read-tree --prefix=a1/ master &&
502 git ls-files -s >actual &&
503 (
885b9810
JH
504 echo "100644 $o1 0 M/a"
505 echo "100644 $o0 0 M/b"
744747ef 506 echo "100644 $o0 0 M/c"
885b9810
JH
507 echo "100644 $o1 0 M/d/e"
508 echo "100644 $o1 0 a"
885b9810
JH
509 echo "100644 $o1 0 a1/a"
510 echo "100644 $o0 0 a1/b"
744747ef 511 echo "100644 $o0 0 a1/c"
885b9810
JH
512 echo "100644 $o1 0 a1/d/e"
513 echo "100644 $o0 0 b"
744747ef 514 echo "100644 $o0 0 c"
885b9810
JH
515 echo "100644 $o1 0 d/e"
516 ) >expected &&
3af82863 517 test_cmp expected actual
885b9810
JH
518
519 git read-tree --prefix=z/ master &&
520 git ls-files -s >actual &&
521 (
885b9810
JH
522 echo "100644 $o1 0 M/a"
523 echo "100644 $o0 0 M/b"
744747ef 524 echo "100644 $o0 0 M/c"
885b9810
JH
525 echo "100644 $o1 0 M/d/e"
526 echo "100644 $o1 0 a"
885b9810
JH
527 echo "100644 $o1 0 a1/a"
528 echo "100644 $o0 0 a1/b"
744747ef 529 echo "100644 $o0 0 a1/c"
885b9810
JH
530 echo "100644 $o1 0 a1/d/e"
531 echo "100644 $o0 0 b"
744747ef 532 echo "100644 $o0 0 c"
885b9810 533 echo "100644 $o1 0 d/e"
885b9810
JH
534 echo "100644 $o1 0 z/a"
535 echo "100644 $o0 0 z/b"
744747ef 536 echo "100644 $o0 0 z/c"
885b9810
JH
537 echo "100644 $o1 0 z/d/e"
538 ) >expected &&
3af82863 539 test_cmp expected actual
885b9810
JH
540
541'
542
41f13af5
AR
543test_expect_success 'merge removes empty directories' '
544
545 git reset --hard master &&
546 git checkout -b rm &&
547 git rm d/e &&
548 git commit -mremoved-d/e &&
549 git checkout master &&
550 git merge -s recursive rm &&
551 test_must_fail test -d d
552'
553
885b9810 554test_done