]>
Commit | Line | Data |
---|---|---|
885b9810 JH |
1 | #!/bin/sh |
2 | ||
3 | test_description='merge-recursive backend test' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
7 | test_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 && | |
7d82b06d | 25 | git branch submod && |
d5af5105 SK |
26 | git branch copy && |
27 | git branch rename && | |
8a1c0d32 SK |
28 | if test_have_prereq SYMLINKS |
29 | then | |
30 | git branch rename-ln | |
31 | fi && | |
885b9810 JH |
32 | |
33 | echo hello >>a && | |
34 | cp a d/e && | |
35 | o1=$(git hash-object a) && | |
36 | ||
37 | git add a d/e && | |
38 | ||
39 | test_tick && | |
40 | git commit -m "master modifies a and d/e" && | |
41 | c1=$(git rev-parse --verify HEAD) && | |
42 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && | |
43 | ( | |
885b9810 JH |
44 | echo "100644 blob $o1 a" |
45 | echo "100644 blob $o0 b" | |
744747ef | 46 | echo "100644 blob $o0 c" |
885b9810 | 47 | echo "100644 blob $o1 d/e" |
885b9810 JH |
48 | echo "100644 $o1 0 a" |
49 | echo "100644 $o0 0 b" | |
744747ef | 50 | echo "100644 $o0 0 c" |
885b9810 JH |
51 | echo "100644 $o1 0 d/e" |
52 | ) >expected && | |
3af82863 | 53 | test_cmp expected actual |
885b9810 JH |
54 | ' |
55 | ||
56 | test_expect_success 'setup 2' ' | |
57 | ||
744747ef | 58 | rm -rf [abcd] && |
885b9810 JH |
59 | git checkout side && |
60 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && | |
61 | ( | |
885b9810 JH |
62 | echo "100644 blob $o0 a" |
63 | echo "100644 blob $o0 b" | |
744747ef | 64 | echo "100644 blob $o0 c" |
885b9810 | 65 | echo "100644 blob $o0 d/e" |
885b9810 JH |
66 | echo "100644 $o0 0 a" |
67 | echo "100644 $o0 0 b" | |
744747ef | 68 | echo "100644 $o0 0 c" |
885b9810 JH |
69 | echo "100644 $o0 0 d/e" |
70 | ) >expected && | |
3af82863 | 71 | test_cmp expected actual && |
885b9810 JH |
72 | |
73 | echo goodbye >>a && | |
74 | o2=$(git hash-object a) && | |
75 | ||
76 | git add a && | |
77 | ||
78 | test_tick && | |
79 | git commit -m "side modifies a" && | |
80 | c2=$(git rev-parse --verify HEAD) && | |
81 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && | |
82 | ( | |
885b9810 JH |
83 | echo "100644 blob $o2 a" |
84 | echo "100644 blob $o0 b" | |
744747ef | 85 | echo "100644 blob $o0 c" |
885b9810 | 86 | echo "100644 blob $o0 d/e" |
885b9810 JH |
87 | echo "100644 $o2 0 a" |
88 | echo "100644 $o0 0 b" | |
744747ef | 89 | echo "100644 $o0 0 c" |
885b9810 JH |
90 | echo "100644 $o0 0 d/e" |
91 | ) >expected && | |
3af82863 | 92 | test_cmp expected actual |
885b9810 JH |
93 | ' |
94 | ||
95 | test_expect_success 'setup 3' ' | |
96 | ||
744747ef | 97 | rm -rf [abcd] && |
885b9810 JH |
98 | git checkout df-1 && |
99 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && | |
100 | ( | |
885b9810 JH |
101 | echo "100644 blob $o0 a" |
102 | echo "100644 blob $o0 b" | |
744747ef | 103 | echo "100644 blob $o0 c" |
885b9810 | 104 | echo "100644 blob $o0 d/e" |
885b9810 JH |
105 | echo "100644 $o0 0 a" |
106 | echo "100644 $o0 0 b" | |
744747ef | 107 | echo "100644 $o0 0 c" |
885b9810 JH |
108 | echo "100644 $o0 0 d/e" |
109 | ) >expected && | |
3af82863 | 110 | test_cmp expected actual && |
885b9810 JH |
111 | |
112 | rm -f b && mkdir b && echo df-1 >b/c && git add b/c && | |
113 | o3=$(git hash-object b/c) && | |
114 | ||
115 | test_tick && | |
116 | git commit -m "df-1 makes b/c" && | |
117 | c3=$(git rev-parse --verify HEAD) && | |
118 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && | |
119 | ( | |
885b9810 JH |
120 | echo "100644 blob $o0 a" |
121 | echo "100644 blob $o3 b/c" | |
744747ef | 122 | echo "100644 blob $o0 c" |
885b9810 | 123 | echo "100644 blob $o0 d/e" |
885b9810 JH |
124 | echo "100644 $o0 0 a" |
125 | echo "100644 $o3 0 b/c" | |
744747ef | 126 | echo "100644 $o0 0 c" |
885b9810 JH |
127 | echo "100644 $o0 0 d/e" |
128 | ) >expected && | |
3af82863 | 129 | test_cmp expected actual |
885b9810 JH |
130 | ' |
131 | ||
132 | test_expect_success 'setup 4' ' | |
133 | ||
744747ef | 134 | rm -rf [abcd] && |
885b9810 JH |
135 | git checkout df-2 && |
136 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && | |
137 | ( | |
885b9810 JH |
138 | echo "100644 blob $o0 a" |
139 | echo "100644 blob $o0 b" | |
744747ef | 140 | echo "100644 blob $o0 c" |
885b9810 | 141 | echo "100644 blob $o0 d/e" |
885b9810 JH |
142 | echo "100644 $o0 0 a" |
143 | echo "100644 $o0 0 b" | |
744747ef | 144 | echo "100644 $o0 0 c" |
885b9810 JH |
145 | echo "100644 $o0 0 d/e" |
146 | ) >expected && | |
3af82863 | 147 | test_cmp expected actual && |
885b9810 JH |
148 | |
149 | rm -f a && mkdir a && echo df-2 >a/c && git add a/c && | |
150 | o4=$(git hash-object a/c) && | |
151 | ||
152 | test_tick && | |
153 | git commit -m "df-2 makes a/c" && | |
154 | c4=$(git rev-parse --verify HEAD) && | |
155 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && | |
156 | ( | |
885b9810 JH |
157 | echo "100644 blob $o4 a/c" |
158 | echo "100644 blob $o0 b" | |
744747ef | 159 | echo "100644 blob $o0 c" |
885b9810 | 160 | echo "100644 blob $o0 d/e" |
885b9810 JH |
161 | echo "100644 $o4 0 a/c" |
162 | echo "100644 $o0 0 b" | |
744747ef | 163 | echo "100644 $o0 0 c" |
885b9810 JH |
164 | echo "100644 $o0 0 d/e" |
165 | ) >expected && | |
3af82863 | 166 | test_cmp expected actual |
885b9810 JH |
167 | ' |
168 | ||
169 | test_expect_success 'setup 5' ' | |
170 | ||
744747ef | 171 | rm -rf [abcd] && |
885b9810 JH |
172 | git checkout remove && |
173 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && | |
174 | ( | |
885b9810 JH |
175 | echo "100644 blob $o0 a" |
176 | echo "100644 blob $o0 b" | |
744747ef | 177 | echo "100644 blob $o0 c" |
885b9810 | 178 | echo "100644 blob $o0 d/e" |
885b9810 JH |
179 | echo "100644 $o0 0 a" |
180 | echo "100644 $o0 0 b" | |
744747ef | 181 | echo "100644 $o0 0 c" |
885b9810 JH |
182 | echo "100644 $o0 0 d/e" |
183 | ) >expected && | |
3af82863 | 184 | test_cmp expected actual && |
885b9810 JH |
185 | |
186 | rm -f b && | |
187 | echo remove-conflict >a && | |
188 | ||
189 | git add a && | |
190 | git rm b && | |
191 | o5=$(git hash-object a) && | |
192 | ||
193 | test_tick && | |
194 | git commit -m "remove removes b and modifies a" && | |
195 | c5=$(git rev-parse --verify HEAD) && | |
196 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && | |
197 | ( | |
885b9810 | 198 | echo "100644 blob $o5 a" |
744747ef | 199 | echo "100644 blob $o0 c" |
885b9810 | 200 | echo "100644 blob $o0 d/e" |
885b9810 | 201 | echo "100644 $o5 0 a" |
744747ef | 202 | echo "100644 $o0 0 c" |
885b9810 JH |
203 | echo "100644 $o0 0 d/e" |
204 | ) >expected && | |
3af82863 | 205 | test_cmp expected actual |
885b9810 JH |
206 | |
207 | ' | |
208 | ||
209 | test_expect_success 'setup 6' ' | |
210 | ||
744747ef | 211 | rm -rf [abcd] && |
885b9810 JH |
212 | git checkout df-3 && |
213 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && | |
214 | ( | |
885b9810 JH |
215 | echo "100644 blob $o0 a" |
216 | echo "100644 blob $o0 b" | |
744747ef | 217 | echo "100644 blob $o0 c" |
885b9810 | 218 | echo "100644 blob $o0 d/e" |
885b9810 JH |
219 | echo "100644 $o0 0 a" |
220 | echo "100644 $o0 0 b" | |
744747ef | 221 | echo "100644 $o0 0 c" |
885b9810 JH |
222 | echo "100644 $o0 0 d/e" |
223 | ) >expected && | |
3af82863 | 224 | test_cmp expected actual && |
885b9810 JH |
225 | |
226 | rm -fr d && echo df-3 >d && git add d && | |
227 | o6=$(git hash-object d) && | |
228 | ||
229 | test_tick && | |
230 | git commit -m "df-3 makes d" && | |
231 | c6=$(git rev-parse --verify HEAD) && | |
232 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && | |
233 | ( | |
885b9810 JH |
234 | echo "100644 blob $o0 a" |
235 | echo "100644 blob $o0 b" | |
744747ef | 236 | echo "100644 blob $o0 c" |
885b9810 | 237 | echo "100644 blob $o6 d" |
885b9810 JH |
238 | echo "100644 $o0 0 a" |
239 | echo "100644 $o0 0 b" | |
744747ef | 240 | echo "100644 $o0 0 c" |
885b9810 JH |
241 | echo "100644 $o6 0 d" |
242 | ) >expected && | |
3af82863 | 243 | test_cmp expected actual |
885b9810 JH |
244 | ' |
245 | ||
7d82b06d JS |
246 | test_expect_success 'setup 7' ' |
247 | ||
248 | git checkout submod && | |
249 | git rm d/e && | |
250 | test_tick && | |
251 | git commit -m "remove d/e" && | |
252 | git update-index --add --cacheinfo 160000 $c1 d && | |
253 | test_tick && | |
254 | git commit -m "make d/ a submodule" | |
255 | ' | |
256 | ||
d5af5105 SK |
257 | test_expect_success 'setup 8' ' |
258 | git checkout rename && | |
259 | git mv a e && | |
260 | git add e && | |
261 | test_tick && | |
8a1c0d32 SK |
262 | git commit -m "rename a->e" && |
263 | if test_have_prereq SYMLINKS | |
264 | then | |
265 | git checkout rename-ln && | |
266 | git mv a e && | |
267 | ln -s e a && | |
268 | git add a e && | |
269 | test_tick && | |
814f7d90 JK |
270 | git commit -m "rename a->e, symlink a->e" && |
271 | oln=`printf e | git hash-object --stdin` | |
8a1c0d32 | 272 | fi |
d5af5105 SK |
273 | ' |
274 | ||
275 | test_expect_success 'setup 9' ' | |
276 | git checkout copy && | |
277 | cp a e && | |
278 | git add e && | |
279 | test_tick && | |
280 | git commit -m "copy a->e" | |
281 | ' | |
282 | ||
885b9810 JH |
283 | test_expect_success 'merge-recursive simple' ' |
284 | ||
744747ef | 285 | rm -fr [abcd] && |
885b9810 JH |
286 | git checkout -f "$c2" && |
287 | ||
0cb0e143 | 288 | git merge-recursive "$c0" -- "$c2" "$c1" |
885b9810 JH |
289 | status=$? |
290 | case "$status" in | |
291 | 1) | |
292 | : happy | |
293 | ;; | |
294 | *) | |
295 | echo >&2 "why status $status!!!" | |
296 | false | |
297 | ;; | |
298 | esac | |
299 | ' | |
300 | ||
301 | test_expect_success 'merge-recursive result' ' | |
302 | ||
303 | git ls-files -s >actual && | |
304 | ( | |
885b9810 JH |
305 | echo "100644 $o0 1 a" |
306 | echo "100644 $o2 2 a" | |
307 | echo "100644 $o1 3 a" | |
308 | echo "100644 $o0 0 b" | |
744747ef | 309 | echo "100644 $o0 0 c" |
885b9810 JH |
310 | echo "100644 $o1 0 d/e" |
311 | ) >expected && | |
3af82863 | 312 | test_cmp expected actual |
885b9810 JH |
313 | |
314 | ' | |
315 | ||
f2c8c800 | 316 | test_expect_success 'fail if the index has unresolved entries' ' |
446247db JH |
317 | |
318 | rm -fr [abcd] && | |
319 | git checkout -f "$c1" && | |
320 | ||
321 | test_must_fail git merge "$c5" && | |
322 | test_must_fail git merge "$c5" 2> out && | |
f2c8c800 | 323 | test_i18ngrep "not possible because you have unmerged files" out && |
d38a30df MM |
324 | git add -u && |
325 | test_must_fail git merge "$c5" 2> out && | |
f2c8c800 | 326 | test_i18ngrep "You have not concluded your merge" out && |
c8c562a2 CB |
327 | rm -f .git/MERGE_HEAD && |
328 | test_must_fail git merge "$c5" 2> out && | |
f2c8c800 | 329 | test_i18ngrep "Your local changes to the following files would be overwritten by merge:" out |
446247db JH |
330 | ' |
331 | ||
885b9810 JH |
332 | test_expect_success 'merge-recursive remove conflict' ' |
333 | ||
744747ef | 334 | rm -fr [abcd] && |
885b9810 JH |
335 | git checkout -f "$c1" && |
336 | ||
0cb0e143 | 337 | git merge-recursive "$c0" -- "$c1" "$c5" |
885b9810 JH |
338 | status=$? |
339 | case "$status" in | |
340 | 1) | |
341 | : happy | |
342 | ;; | |
343 | *) | |
344 | echo >&2 "why status $status!!!" | |
345 | false | |
346 | ;; | |
347 | esac | |
348 | ' | |
349 | ||
350 | test_expect_success 'merge-recursive remove conflict' ' | |
351 | ||
352 | git ls-files -s >actual && | |
353 | ( | |
885b9810 JH |
354 | echo "100644 $o0 1 a" |
355 | echo "100644 $o1 2 a" | |
356 | echo "100644 $o5 3 a" | |
744747ef | 357 | echo "100644 $o0 0 c" |
885b9810 JH |
358 | echo "100644 $o1 0 d/e" |
359 | ) >expected && | |
3af82863 | 360 | test_cmp expected actual |
885b9810 JH |
361 | |
362 | ' | |
363 | ||
364 | test_expect_success 'merge-recursive d/f simple' ' | |
744747ef | 365 | rm -fr [abcd] && |
885b9810 JH |
366 | git reset --hard && |
367 | git checkout -f "$c1" && | |
368 | ||
0cb0e143 | 369 | git merge-recursive "$c0" -- "$c1" "$c3" |
885b9810 JH |
370 | ' |
371 | ||
372 | test_expect_success 'merge-recursive result' ' | |
373 | ||
374 | git ls-files -s >actual && | |
375 | ( | |
885b9810 JH |
376 | echo "100644 $o1 0 a" |
377 | echo "100644 $o3 0 b/c" | |
744747ef | 378 | echo "100644 $o0 0 c" |
885b9810 JH |
379 | echo "100644 $o1 0 d/e" |
380 | ) >expected && | |
3af82863 | 381 | test_cmp expected actual |
885b9810 JH |
382 | |
383 | ' | |
384 | ||
385 | test_expect_success 'merge-recursive d/f conflict' ' | |
386 | ||
744747ef | 387 | rm -fr [abcd] && |
885b9810 JH |
388 | git reset --hard && |
389 | git checkout -f "$c1" && | |
390 | ||
0cb0e143 | 391 | git merge-recursive "$c0" -- "$c1" "$c4" |
885b9810 JH |
392 | status=$? |
393 | case "$status" in | |
394 | 1) | |
395 | : happy | |
396 | ;; | |
397 | *) | |
398 | echo >&2 "why status $status!!!" | |
399 | false | |
400 | ;; | |
401 | esac | |
402 | ' | |
403 | ||
404 | test_expect_success 'merge-recursive d/f conflict result' ' | |
405 | ||
406 | git ls-files -s >actual && | |
407 | ( | |
885b9810 JH |
408 | echo "100644 $o0 1 a" |
409 | echo "100644 $o1 2 a" | |
410 | echo "100644 $o4 0 a/c" | |
411 | echo "100644 $o0 0 b" | |
744747ef | 412 | echo "100644 $o0 0 c" |
885b9810 JH |
413 | echo "100644 $o1 0 d/e" |
414 | ) >expected && | |
3af82863 | 415 | test_cmp expected actual |
885b9810 JH |
416 | |
417 | ' | |
418 | ||
419 | test_expect_success 'merge-recursive d/f conflict the other way' ' | |
420 | ||
744747ef | 421 | rm -fr [abcd] && |
885b9810 JH |
422 | git reset --hard && |
423 | git checkout -f "$c4" && | |
424 | ||
0cb0e143 | 425 | git merge-recursive "$c0" -- "$c4" "$c1" |
885b9810 JH |
426 | status=$? |
427 | case "$status" in | |
428 | 1) | |
429 | : happy | |
430 | ;; | |
431 | *) | |
432 | echo >&2 "why status $status!!!" | |
433 | false | |
434 | ;; | |
435 | esac | |
436 | ' | |
437 | ||
438 | test_expect_success 'merge-recursive d/f conflict result the other way' ' | |
439 | ||
440 | git ls-files -s >actual && | |
441 | ( | |
885b9810 JH |
442 | echo "100644 $o0 1 a" |
443 | echo "100644 $o1 3 a" | |
444 | echo "100644 $o4 0 a/c" | |
445 | echo "100644 $o0 0 b" | |
744747ef | 446 | echo "100644 $o0 0 c" |
885b9810 JH |
447 | echo "100644 $o1 0 d/e" |
448 | ) >expected && | |
3af82863 | 449 | test_cmp expected actual |
885b9810 JH |
450 | |
451 | ' | |
452 | ||
453 | test_expect_success 'merge-recursive d/f conflict' ' | |
454 | ||
744747ef | 455 | rm -fr [abcd] && |
885b9810 JH |
456 | git reset --hard && |
457 | git checkout -f "$c1" && | |
458 | ||
0cb0e143 | 459 | git merge-recursive "$c0" -- "$c1" "$c6" |
885b9810 JH |
460 | status=$? |
461 | case "$status" in | |
462 | 1) | |
463 | : happy | |
464 | ;; | |
465 | *) | |
466 | echo >&2 "why status $status!!!" | |
467 | false | |
468 | ;; | |
469 | esac | |
470 | ' | |
471 | ||
472 | test_expect_success 'merge-recursive d/f conflict result' ' | |
473 | ||
474 | git ls-files -s >actual && | |
475 | ( | |
885b9810 JH |
476 | echo "100644 $o1 0 a" |
477 | echo "100644 $o0 0 b" | |
744747ef | 478 | echo "100644 $o0 0 c" |
885b9810 JH |
479 | echo "100644 $o6 3 d" |
480 | echo "100644 $o0 1 d/e" | |
481 | echo "100644 $o1 2 d/e" | |
482 | ) >expected && | |
3af82863 | 483 | test_cmp expected actual |
885b9810 JH |
484 | |
485 | ' | |
486 | ||
487 | test_expect_success 'merge-recursive d/f conflict' ' | |
488 | ||
744747ef | 489 | rm -fr [abcd] && |
885b9810 JH |
490 | git reset --hard && |
491 | git checkout -f "$c6" && | |
492 | ||
0cb0e143 | 493 | git merge-recursive "$c0" -- "$c6" "$c1" |
885b9810 JH |
494 | status=$? |
495 | case "$status" in | |
496 | 1) | |
497 | : happy | |
498 | ;; | |
499 | *) | |
500 | echo >&2 "why status $status!!!" | |
501 | false | |
502 | ;; | |
503 | esac | |
504 | ' | |
505 | ||
506 | test_expect_success 'merge-recursive d/f conflict result' ' | |
507 | ||
508 | git ls-files -s >actual && | |
509 | ( | |
885b9810 JH |
510 | echo "100644 $o1 0 a" |
511 | echo "100644 $o0 0 b" | |
744747ef | 512 | echo "100644 $o0 0 c" |
885b9810 JH |
513 | echo "100644 $o6 2 d" |
514 | echo "100644 $o0 1 d/e" | |
515 | echo "100644 $o1 3 d/e" | |
516 | ) >expected && | |
3af82863 | 517 | test_cmp expected actual |
885b9810 JH |
518 | |
519 | ' | |
520 | ||
521 | test_expect_success 'reset and 3-way merge' ' | |
522 | ||
523 | git reset --hard "$c2" && | |
524 | git read-tree -m "$c0" "$c2" "$c1" | |
525 | ||
526 | ' | |
527 | ||
528 | test_expect_success 'reset and bind merge' ' | |
529 | ||
530 | git reset --hard master && | |
531 | git read-tree --prefix=M/ master && | |
532 | git ls-files -s >actual && | |
533 | ( | |
885b9810 JH |
534 | echo "100644 $o1 0 M/a" |
535 | echo "100644 $o0 0 M/b" | |
744747ef | 536 | echo "100644 $o0 0 M/c" |
885b9810 JH |
537 | echo "100644 $o1 0 M/d/e" |
538 | echo "100644 $o1 0 a" | |
539 | echo "100644 $o0 0 b" | |
744747ef | 540 | echo "100644 $o0 0 c" |
885b9810 JH |
541 | echo "100644 $o1 0 d/e" |
542 | ) >expected && | |
3af82863 | 543 | test_cmp expected actual && |
885b9810 JH |
544 | |
545 | git read-tree --prefix=a1/ master && | |
546 | git ls-files -s >actual && | |
547 | ( | |
885b9810 JH |
548 | echo "100644 $o1 0 M/a" |
549 | echo "100644 $o0 0 M/b" | |
744747ef | 550 | echo "100644 $o0 0 M/c" |
885b9810 JH |
551 | echo "100644 $o1 0 M/d/e" |
552 | echo "100644 $o1 0 a" | |
885b9810 JH |
553 | echo "100644 $o1 0 a1/a" |
554 | echo "100644 $o0 0 a1/b" | |
744747ef | 555 | echo "100644 $o0 0 a1/c" |
885b9810 JH |
556 | echo "100644 $o1 0 a1/d/e" |
557 | echo "100644 $o0 0 b" | |
744747ef | 558 | echo "100644 $o0 0 c" |
885b9810 JH |
559 | echo "100644 $o1 0 d/e" |
560 | ) >expected && | |
a48fcd83 | 561 | test_cmp expected actual && |
885b9810 JH |
562 | |
563 | git read-tree --prefix=z/ master && | |
564 | git ls-files -s >actual && | |
565 | ( | |
885b9810 JH |
566 | echo "100644 $o1 0 M/a" |
567 | echo "100644 $o0 0 M/b" | |
744747ef | 568 | echo "100644 $o0 0 M/c" |
885b9810 JH |
569 | echo "100644 $o1 0 M/d/e" |
570 | echo "100644 $o1 0 a" | |
885b9810 JH |
571 | echo "100644 $o1 0 a1/a" |
572 | echo "100644 $o0 0 a1/b" | |
744747ef | 573 | echo "100644 $o0 0 a1/c" |
885b9810 JH |
574 | echo "100644 $o1 0 a1/d/e" |
575 | echo "100644 $o0 0 b" | |
744747ef | 576 | echo "100644 $o0 0 c" |
885b9810 | 577 | echo "100644 $o1 0 d/e" |
885b9810 JH |
578 | echo "100644 $o1 0 z/a" |
579 | echo "100644 $o0 0 z/b" | |
744747ef | 580 | echo "100644 $o0 0 z/c" |
885b9810 JH |
581 | echo "100644 $o1 0 z/d/e" |
582 | ) >expected && | |
3af82863 | 583 | test_cmp expected actual |
885b9810 JH |
584 | |
585 | ' | |
586 | ||
41f13af5 AR |
587 | test_expect_success 'merge removes empty directories' ' |
588 | ||
589 | git reset --hard master && | |
590 | git checkout -b rm && | |
591 | git rm d/e && | |
592 | git commit -mremoved-d/e && | |
593 | git checkout master && | |
594 | git merge -s recursive rm && | |
595 | test_must_fail test -d d | |
596 | ' | |
597 | ||
7d82b06d JS |
598 | test_expect_failure 'merge-recursive simple w/submodule' ' |
599 | ||
600 | git checkout submod && | |
601 | git merge remove | |
602 | ' | |
603 | ||
604 | test_expect_failure 'merge-recursive simple w/submodule result' ' | |
605 | ||
606 | git ls-files -s >actual && | |
607 | ( | |
608 | echo "100644 $o5 0 a" | |
609 | echo "100644 $o0 0 c" | |
610 | echo "160000 $c1 0 d" | |
611 | ) >expected && | |
612 | test_cmp expected actual | |
613 | ' | |
614 | ||
d5af5105 SK |
615 | test_expect_success 'merge-recursive copy vs. rename' ' |
616 | git checkout -f copy && | |
617 | git merge rename && | |
618 | ( git ls-tree -r HEAD && git ls-files -s ) >actual && | |
619 | ( | |
620 | echo "100644 blob $o0 b" | |
621 | echo "100644 blob $o0 c" | |
622 | echo "100644 blob $o0 d/e" | |
623 | echo "100644 blob $o0 e" | |
624 | echo "100644 $o0 0 b" | |
625 | echo "100644 $o0 0 c" | |
626 | echo "100644 $o0 0 d/e" | |
627 | echo "100644 $o0 0 e" | |
628 | ) >expected && | |
629 | test_cmp expected actual | |
630 | ' | |
631 | ||
8a1c0d32 SK |
632 | if test_have_prereq SYMLINKS |
633 | then | |
814f7d90 | 634 | test_expect_failure 'merge-recursive rename vs. rename/symlink' ' |
8a1c0d32 SK |
635 | |
636 | git checkout -f rename && | |
637 | git merge rename-ln && | |
638 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && | |
639 | ( | |
814f7d90 | 640 | echo "120000 blob $oln a" |
8a1c0d32 SK |
641 | echo "100644 blob $o0 b" |
642 | echo "100644 blob $o0 c" | |
643 | echo "100644 blob $o0 d/e" | |
644 | echo "100644 blob $o0 e" | |
814f7d90 | 645 | echo "120000 $oln 0 a" |
8a1c0d32 SK |
646 | echo "100644 $o0 0 b" |
647 | echo "100644 $o0 0 c" | |
648 | echo "100644 $o0 0 d/e" | |
649 | echo "100644 $o0 0 e" | |
650 | ) >expected && | |
651 | test_cmp expected actual | |
652 | ' | |
653 | fi | |
654 | ||
655 | ||
885b9810 | 656 | test_done |