##// END OF EJS Templates
merge: add more thorough tests for --force...
Martin von Zweigbergk -
r23449:eeecf29c default
parent child Browse files
Show More
This diff has been collapsed as it changes many lines, (688 lines changed) Show them Hide them
@@ -1,45 +1,675 b''
1 Set up a base, local, and remote changeset, as well as the working copy state.
2 Files names are of the form base_remote_local_working-copy. For example,
3 content1_content2_content1_content2-untracked represents a
4 file that was modified in the remote changeset, left untouched in the
5 local changeset, and then modified in the working copy to match the
6 remote content, then finally forgotten.
7
1 $ hg init
8 $ hg init
2
9
3 $ echo a > a
10 Create base changeset
4 $ hg ci -qAm 'add a'
11
12 $ python $TESTDIR/generate-working-copy-states.py state 3 1
13 $ hg addremove -q --similarity 0
14 $ hg commit -qm 'base'
15
16 Create remote changeset
17
18 $ python $TESTDIR/generate-working-copy-states.py state 3 2
19 $ hg addremove -q --similarity 0
20 $ hg commit -qm 'remote'
21
22 Create local changeset
23
24 $ hg update -q 0
25 $ python $TESTDIR/generate-working-copy-states.py state 3 3
26 $ hg addremove -q --similarity 0
27 $ hg commit -qm 'local'
28
29 Set up working directory
30
31 $ python $TESTDIR/generate-working-copy-states.py state 3 wc
32 $ hg addremove -q --similarity 0
33 $ hg forget *_*_*_*-untracked
34 $ rm *_*_*_missing-*
5
35
6 $ echo b > b
36 $ hg status -A
7 $ hg ci -qAm 'add b'
37 M content1_content1_content1_content4-tracked
38 M content1_content1_content3_content1-tracked
39 M content1_content1_content3_content4-tracked
40 M content1_content2_content1_content2-tracked
41 M content1_content2_content1_content4-tracked
42 M content1_content2_content2_content1-tracked
43 M content1_content2_content2_content4-tracked
44 M content1_content2_content3_content1-tracked
45 M content1_content2_content3_content2-tracked
46 M content1_content2_content3_content4-tracked
47 M content1_missing_content1_content4-tracked
48 M content1_missing_content3_content1-tracked
49 M content1_missing_content3_content4-tracked
50 M missing_content2_content2_content4-tracked
51 M missing_content2_content3_content2-tracked
52 M missing_content2_content3_content4-tracked
53 M missing_missing_content3_content4-tracked
54 A content1_content1_missing_content1-tracked
55 A content1_content1_missing_content4-tracked
56 A content1_content2_missing_content1-tracked
57 A content1_content2_missing_content2-tracked
58 A content1_content2_missing_content4-tracked
59 A content1_missing_missing_content1-tracked
60 A content1_missing_missing_content4-tracked
61 A missing_content2_missing_content2-tracked
62 A missing_content2_missing_content4-tracked
63 A missing_missing_missing_content4-tracked
64 R content1_content1_content1_content1-untracked
65 R content1_content1_content1_content4-untracked
66 R content1_content1_content1_missing-untracked
67 R content1_content1_content3_content1-untracked
68 R content1_content1_content3_content3-untracked
69 R content1_content1_content3_content4-untracked
70 R content1_content1_content3_missing-untracked
71 R content1_content2_content1_content1-untracked
72 R content1_content2_content1_content2-untracked
73 R content1_content2_content1_content4-untracked
74 R content1_content2_content1_missing-untracked
75 R content1_content2_content2_content1-untracked
76 R content1_content2_content2_content2-untracked
77 R content1_content2_content2_content4-untracked
78 R content1_content2_content2_missing-untracked
79 R content1_content2_content3_content1-untracked
80 R content1_content2_content3_content2-untracked
81 R content1_content2_content3_content3-untracked
82 R content1_content2_content3_content4-untracked
83 R content1_content2_content3_missing-untracked
84 R content1_missing_content1_content1-untracked
85 R content1_missing_content1_content4-untracked
86 R content1_missing_content1_missing-untracked
87 R content1_missing_content3_content1-untracked
88 R content1_missing_content3_content3-untracked
89 R content1_missing_content3_content4-untracked
90 R content1_missing_content3_missing-untracked
91 R missing_content2_content2_content2-untracked
92 R missing_content2_content2_content4-untracked
93 R missing_content2_content2_missing-untracked
94 R missing_content2_content3_content2-untracked
95 R missing_content2_content3_content3-untracked
96 R missing_content2_content3_content4-untracked
97 R missing_content2_content3_missing-untracked
98 R missing_missing_content3_content3-untracked
99 R missing_missing_content3_content4-untracked
100 R missing_missing_content3_missing-untracked
101 ! content1_content1_content1_missing-tracked
102 ! content1_content1_content3_missing-tracked
103 ! content1_content1_missing_missing-tracked
104 ! content1_content2_content1_missing-tracked
105 ! content1_content2_content2_missing-tracked
106 ! content1_content2_content3_missing-tracked
107 ! content1_content2_missing_missing-tracked
108 ! content1_missing_content1_missing-tracked
109 ! content1_missing_content3_missing-tracked
110 ! content1_missing_missing_missing-tracked
111 ! missing_content2_content2_missing-tracked
112 ! missing_content2_content3_missing-tracked
113 ! missing_content2_missing_missing-tracked
114 ! missing_missing_content3_missing-tracked
115 ! missing_missing_missing_missing-tracked
116 ? content1_content1_missing_content1-untracked
117 ? content1_content1_missing_content4-untracked
118 ? content1_content2_missing_content1-untracked
119 ? content1_content2_missing_content2-untracked
120 ? content1_content2_missing_content4-untracked
121 ? content1_missing_missing_content1-untracked
122 ? content1_missing_missing_content4-untracked
123 ? missing_content2_missing_content2-untracked
124 ? missing_content2_missing_content4-untracked
125 ? missing_missing_missing_content4-untracked
126 C content1_content1_content1_content1-tracked
127 C content1_content1_content3_content3-tracked
128 C content1_content2_content1_content1-tracked
129 C content1_content2_content2_content2-tracked
130 C content1_content2_content3_content3-tracked
131 C content1_missing_content1_content1-tracked
132 C content1_missing_content3_content3-tracked
133 C missing_content2_content2_content2-tracked
134 C missing_content2_content3_content3-tracked
135 C missing_missing_content3_content3-tracked
136
137 Merge with remote
138
139 # Notes:
140 # - local and remote changed content1_content2_*_content2-untracked
141 # in the same way, so it could potentially be left alone
8
142
9 $ hg up -qC 0
143 $ hg merge -f --tool internal:merge3 'desc("remote")'
10 $ hg rm a
144 local changed content1_missing_content1_content4-tracked which remote deleted
11 $ hg ci -m 'rm a'
145 use (c)hanged version or (d)elete? c
12 created new head
146 local changed content1_missing_content3_content3-tracked which remote deleted
147 use (c)hanged version or (d)elete? c
148 local changed content1_missing_content3_content4-tracked which remote deleted
149 use (c)hanged version or (d)elete? c
150 local changed content1_missing_missing_content4-tracked which remote deleted
151 use (c)hanged version or (d)elete? c
152 remote changed content1_content2_content1_content1-untracked which local deleted
153 use (c)hanged version or leave (d)eleted? c
154 remote changed content1_content2_content1_content2-untracked which local deleted
155 use (c)hanged version or leave (d)eleted? c
156 remote changed content1_content2_content1_content4-untracked which local deleted
157 use (c)hanged version or leave (d)eleted? c
158 remote changed content1_content2_content1_missing-tracked which local deleted
159 use (c)hanged version or leave (d)eleted? c
160 remote changed content1_content2_content1_missing-untracked which local deleted
161 use (c)hanged version or leave (d)eleted? c
162 remote changed content1_content2_content2_content1-untracked which local deleted
163 use (c)hanged version or leave (d)eleted? c
164 remote changed content1_content2_content2_content2-untracked which local deleted
165 use (c)hanged version or leave (d)eleted? c
166 remote changed content1_content2_content2_content4-untracked which local deleted
167 use (c)hanged version or leave (d)eleted? c
168 remote changed content1_content2_content2_missing-tracked which local deleted
169 use (c)hanged version or leave (d)eleted? c
170 remote changed content1_content2_content2_missing-untracked which local deleted
171 use (c)hanged version or leave (d)eleted? c
172 remote changed content1_content2_content3_content1-untracked which local deleted
173 use (c)hanged version or leave (d)eleted? c
174 remote changed content1_content2_content3_content2-untracked which local deleted
175 use (c)hanged version or leave (d)eleted? c
176 remote changed content1_content2_content3_content3-untracked which local deleted
177 use (c)hanged version or leave (d)eleted? c
178 remote changed content1_content2_content3_content4-untracked which local deleted
179 use (c)hanged version or leave (d)eleted? c
180 remote changed content1_content2_content3_missing-tracked which local deleted
181 use (c)hanged version or leave (d)eleted? c
182 remote changed content1_content2_content3_missing-untracked which local deleted
183 use (c)hanged version or leave (d)eleted? c
184 remote changed content1_content2_missing_content1-untracked which local deleted
185 use (c)hanged version or leave (d)eleted? c
186 remote changed content1_content2_missing_content2-untracked which local deleted
187 use (c)hanged version or leave (d)eleted? c
188 remote changed content1_content2_missing_content4-untracked which local deleted
189 use (c)hanged version or leave (d)eleted? c
190 remote changed content1_content2_missing_missing-tracked which local deleted
191 use (c)hanged version or leave (d)eleted? c
192 remote changed content1_content2_missing_missing-untracked which local deleted
193 use (c)hanged version or leave (d)eleted? c
194 merging content1_content2_content1_content4-tracked
195 warning: conflicts during merge.
196 merging content1_content2_content1_content4-tracked incomplete! (edit conflicts, then use 'hg resolve --mark')
197 merging content1_content2_content2_content1-tracked
198 merging content1_content2_content2_content4-tracked
199 warning: conflicts during merge.
200 merging content1_content2_content2_content4-tracked incomplete! (edit conflicts, then use 'hg resolve --mark')
201 merging content1_content2_content3_content1-tracked
202 merging content1_content2_content3_content3-tracked
203 warning: conflicts during merge.
204 merging content1_content2_content3_content3-tracked incomplete! (edit conflicts, then use 'hg resolve --mark')
205 merging content1_content2_content3_content4-tracked
206 warning: conflicts during merge.
207 merging content1_content2_content3_content4-tracked incomplete! (edit conflicts, then use 'hg resolve --mark')
208 merging content1_content2_missing_content1-tracked
209 merging content1_content2_missing_content4-tracked
210 warning: conflicts during merge.
211 merging content1_content2_missing_content4-tracked incomplete! (edit conflicts, then use 'hg resolve --mark')
212 merging missing_content2_content2_content4-tracked
213 warning: conflicts during merge.
214 merging missing_content2_content2_content4-tracked incomplete! (edit conflicts, then use 'hg resolve --mark')
215 merging missing_content2_content3_content3-tracked
216 warning: conflicts during merge.
217 merging missing_content2_content3_content3-tracked incomplete! (edit conflicts, then use 'hg resolve --mark')
218 merging missing_content2_content3_content4-tracked
219 warning: conflicts during merge.
220 merging missing_content2_content3_content4-tracked incomplete! (edit conflicts, then use 'hg resolve --mark')
221 merging missing_content2_missing_content4-tracked
222 warning: conflicts during merge.
223 merging missing_content2_missing_content4-tracked incomplete! (edit conflicts, then use 'hg resolve --mark')
224 merging missing_content2_missing_content4-untracked
225 warning: conflicts during merge.
226 merging missing_content2_missing_content4-untracked incomplete! (edit conflicts, then use 'hg resolve --mark')
227 39 files updated, 3 files merged, 8 files removed, 10 files unresolved
228 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
229 [1]
230
231 Check which files need to be resolved (should correspond to the ouput above).
232 This should be the files for which the base (1st filename segment), the remote
233 (2nd segment) and the working copy (4th segment) are all different.
234
235 Interestingly, one untracked file got merged and added, which corresponds the
236 odd 'if force and branchmerge and different' case in manifestmerge().
13
237
14 $ hg up -qC 1
238 $ hg resolve -l
15 $ rm a
239 U content1_content2_content1_content4-tracked
240 R content1_content2_content2_content1-tracked
241 U content1_content2_content2_content4-tracked
242 R content1_content2_content3_content1-tracked
243 U content1_content2_content3_content3-tracked
244 U content1_content2_content3_content4-tracked
245 R content1_content2_missing_content1-tracked
246 U content1_content2_missing_content4-tracked
247 U missing_content2_content2_content4-tracked
248 U missing_content2_content3_content3-tracked
249 U missing_content2_content3_content4-tracked
250 U missing_content2_missing_content4-tracked
251 U missing_content2_missing_content4-untracked
252
253 Check status and file content
254
255 Some files get added (e.g. content1_content2_content1_content1-untracked)
256
257 It is not intuitive that content1_content2_content1_content4-tracked gets
258 merged while content1_content2_content1_content4-untracked gets overwritten.
259 Any *_content2_*-untracked triggers the modified/deleted prompt and then gets
260 overwritten.
261
262 A lot of untracked files become tracked, for example
263 content1_content2_content2_content2-untracked.
264
265 *_missing_missing_missing-tracked is reported as removed ('R'), which
266 doesn't make sense since the file did not exist in the parent, but on the
267 other hand, merged-in additions are reported as modifications, which is
268 almost as strange.
269
270 missing_missing_content3_missing-tracked becomes removed ('R'), even though
271 the remote side did not touch the file
16
272
17 Local deleted a file, remote removed
273 $ for f in `python $TESTDIR/generate-working-copy-states.py filelist 3`
274 > do
275 > echo
276 > hg status -A $f
277 > if test -f $f
278 > then
279 > cat $f
280 > else
281 > echo '<missing>'
282 > fi
283 > if test -f ${f}.orig
284 > then
285 > echo ${f}.orig:
286 > cat ${f}.orig
287 > fi
288 > done
289
290 C content1_content1_content1_content1-tracked
291 content1
292
293 R content1_content1_content1_content1-untracked
294 content1
295
296 M content1_content1_content1_content4-tracked
297 content4
298
299 R content1_content1_content1_content4-untracked
300 content4
301
302 ! content1_content1_content1_missing-tracked
303 <missing>
18
304
19 Should fail, since there are deleted files:
305 R content1_content1_content1_missing-untracked
306 <missing>
307
308 M content1_content1_content3_content1-tracked
309 content1
310
311 R content1_content1_content3_content1-untracked
312 content1
313
314 C content1_content1_content3_content3-tracked
315 content3
316
317 R content1_content1_content3_content3-untracked
318 content3
319
320 M content1_content1_content3_content4-tracked
321 content4
322
323 R content1_content1_content3_content4-untracked
324 content4
325
326 ! content1_content1_content3_missing-tracked
327 <missing>
328
329 R content1_content1_content3_missing-untracked
330 <missing>
331
332 A content1_content1_missing_content1-tracked
333 content1
334
335 ? content1_content1_missing_content1-untracked
336 content1
337
338 A content1_content1_missing_content4-tracked
339 content4
20
340
21 $ hg merge
341 ? content1_content1_missing_content4-untracked
22 abort: uncommitted changes
342 content4
23 (use 'hg status' to list changes)
343
24 [255]
344 ! content1_content1_missing_missing-tracked
345 <missing>
346
347 content1_content1_missing_missing-untracked: * (glob)
348 <missing>
349
350 M content1_content2_content1_content1-tracked
351 content2
352
353 M content1_content2_content1_content1-untracked
354 content2
355
356 M content1_content2_content1_content2-tracked
357 content2
358
359 M content1_content2_content1_content2-untracked
360 content2
361
362 M content1_content2_content1_content4-tracked
363 <<<<<<< local: 0447570f1af6 - test: local
364 content4
365 ||||||| base
366 content1
367 =======
368 content2
369 >>>>>>> other: 85100b8c675b - test: remote
370 content1_content2_content1_content4-tracked.orig:
371 content4
372
373 M content1_content2_content1_content4-untracked
374 content2
375
376 M content1_content2_content1_missing-tracked
377 content2
378
379 M content1_content2_content1_missing-untracked
380 content2
381
382 M content1_content2_content2_content1-tracked
383 content2
384
385 M content1_content2_content2_content1-untracked
386 content2
387
388 C content1_content2_content2_content2-tracked
389 content2
390
391 M content1_content2_content2_content2-untracked
392 content2
393
394 M content1_content2_content2_content4-tracked
395 <<<<<<< local: 0447570f1af6 - test: local
396 content4
397 ||||||| base
398 content1
399 =======
400 content2
401 >>>>>>> other: 85100b8c675b - test: remote
402 content1_content2_content2_content4-tracked.orig:
403 content4
404
405 M content1_content2_content2_content4-untracked
406 content2
407
408 M content1_content2_content2_missing-tracked
409 content2
410
411 M content1_content2_content2_missing-untracked
412 content2
413
414 M content1_content2_content3_content1-tracked
415 content2
416
417 M content1_content2_content3_content1-untracked
418 content2
419
420 M content1_content2_content3_content2-tracked
421 content2
25
422
26 Should succeed with --force:
423 M content1_content2_content3_content2-untracked
424 content2
425
426 M content1_content2_content3_content3-tracked
427 <<<<<<< local: 0447570f1af6 - test: local
428 content3
429 ||||||| base
430 content1
431 =======
432 content2
433 >>>>>>> other: 85100b8c675b - test: remote
434 content1_content2_content3_content3-tracked.orig:
435 content3
436
437 M content1_content2_content3_content3-untracked
438 content2
439
440 M content1_content2_content3_content4-tracked
441 <<<<<<< local: 0447570f1af6 - test: local
442 content4
443 ||||||| base
444 content1
445 =======
446 content2
447 >>>>>>> other: 85100b8c675b - test: remote
448 content1_content2_content3_content4-tracked.orig:
449 content4
450
451 M content1_content2_content3_content4-untracked
452 content2
453
454 M content1_content2_content3_missing-tracked
455 content2
456
457 M content1_content2_content3_missing-untracked
458 content2
459
460 M content1_content2_missing_content1-tracked
461 content2
27
462
28 $ hg -v merge --force
463 M content1_content2_missing_content1-untracked
29 resolving manifests
464 content2
30 removing a
465
31 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
466 M content1_content2_missing_content2-tracked
32 (branch merge, don't forget to commit)
467 content2
468
469 M content1_content2_missing_content2-untracked
470 content2
471
472 M content1_content2_missing_content4-tracked
473 <<<<<<< local: 0447570f1af6 - test: local
474 content4
475 ||||||| base
476 content1
477 =======
478 content2
479 >>>>>>> other: 85100b8c675b - test: remote
480 content1_content2_missing_content4-tracked.orig:
481 content4
482
483 M content1_content2_missing_content4-untracked
484 content2
485
486 M content1_content2_missing_missing-tracked
487 content2
488
489 M content1_content2_missing_missing-untracked
490 content2
491
492 R content1_missing_content1_content1-tracked
493 <missing>
494
495 R content1_missing_content1_content1-untracked
496 content1
497
498 M content1_missing_content1_content4-tracked
499 content4
500
501 R content1_missing_content1_content4-untracked
502 content4
503
504 R content1_missing_content1_missing-tracked
505 <missing>
33
506
34 Should show 'a' as removed:
507 R content1_missing_content1_missing-untracked
508 <missing>
509
510 R content1_missing_content3_content1-tracked
511 <missing>
512
513 R content1_missing_content3_content1-untracked
514 content1
515
516 C content1_missing_content3_content3-tracked
517 content3
518
519 R content1_missing_content3_content3-untracked
520 content3
521
522 M content1_missing_content3_content4-tracked
523 content4
524
525 R content1_missing_content3_content4-untracked
526 content4
527
528 R content1_missing_content3_missing-tracked
529 <missing>
530
531 R content1_missing_content3_missing-untracked
532 <missing>
533
534 R content1_missing_missing_content1-tracked
535 <missing>
536
537 ? content1_missing_missing_content1-untracked
538 content1
539
540 A content1_missing_missing_content4-tracked
541 content4
35
542
36 $ hg status
543 ? content1_missing_missing_content4-untracked
37 R a
544 content4
545
546 R content1_missing_missing_missing-tracked
547 <missing>
548
549 content1_missing_missing_missing-untracked: * (glob)
550 <missing>
551
552 C missing_content2_content2_content2-tracked
553 content2
554
555 M missing_content2_content2_content2-untracked
556 content2
557
558 M missing_content2_content2_content4-tracked
559 <<<<<<< local: 0447570f1af6 - test: local
560 content4
561 ||||||| base
562 =======
563 content2
564 >>>>>>> other: 85100b8c675b - test: remote
565 missing_content2_content2_content4-tracked.orig:
566 content4
567
568 M missing_content2_content2_content4-untracked
569 content2
570
571 M missing_content2_content2_missing-tracked
572 content2
573
574 M missing_content2_content2_missing-untracked
575 content2
576
577 M missing_content2_content3_content2-tracked
578 content2
579
580 M missing_content2_content3_content2-untracked
581 content2
38
582
39 $ hg ci -m merge
583 M missing_content2_content3_content3-tracked
584 <<<<<<< local: 0447570f1af6 - test: local
585 content3
586 ||||||| base
587 =======
588 content2
589 >>>>>>> other: 85100b8c675b - test: remote
590 missing_content2_content3_content3-tracked.orig:
591 content3
592
593 M missing_content2_content3_content3-untracked
594 content2
40
595
41 Should not show 'a':
596 M missing_content2_content3_content4-tracked
597 <<<<<<< local: 0447570f1af6 - test: local
598 content4
599 ||||||| base
600 =======
601 content2
602 >>>>>>> other: 85100b8c675b - test: remote
603 missing_content2_content3_content4-tracked.orig:
604 content4
605
606 M missing_content2_content3_content4-untracked
607 content2
608
609 M missing_content2_content3_missing-tracked
610 content2
611
612 M missing_content2_content3_missing-untracked
613 content2
614
615 M missing_content2_missing_content2-tracked
616 content2
617
618 M missing_content2_missing_content2-untracked
619 content2
42
620
43 $ hg manifest
621 M missing_content2_missing_content4-tracked
44 b
622 <<<<<<< local: 0447570f1af6 - test: local
623 content4
624 ||||||| base
625 =======
626 content2
627 >>>>>>> other: 85100b8c675b - test: remote
628 missing_content2_missing_content4-tracked.orig:
629 content4
630
631 M missing_content2_missing_content4-untracked
632 <<<<<<< local: 0447570f1af6 - test: local
633 content4
634 ||||||| base
635 =======
636 content2
637 >>>>>>> other: 85100b8c675b - test: remote
638 missing_content2_missing_content4-untracked.orig:
639 content4
640
641 M missing_content2_missing_missing-tracked
642 content2
643
644 M missing_content2_missing_missing-untracked
645 content2
45
646
647 C missing_missing_content3_content3-tracked
648 content3
649
650 R missing_missing_content3_content3-untracked
651 content3
652
653 M missing_missing_content3_content4-tracked
654 content4
655
656 R missing_missing_content3_content4-untracked
657 content4
658
659 R missing_missing_content3_missing-tracked
660 <missing>
661
662 R missing_missing_content3_missing-untracked
663 <missing>
664
665 A missing_missing_missing_content4-tracked
666 content4
667
668 ? missing_missing_missing_content4-untracked
669 content4
670
671 R missing_missing_missing_missing-tracked
672 <missing>
673
674 missing_missing_missing_missing-untracked: * (glob)
675 <missing>
General Comments 0
You need to be logged in to leave comments. Login now