changeset 45732 | 4ffe502673c3 |
parent 45704 | 5e72827dae1e |
child 45733 | ee3fd9021fac |
45731:03690079d7dd | 45732:4ffe502673c3 |
---|---|
162 o 1 i-1: a -move-> c |
162 o 1 i-1: a -move-> c |
163 | |
163 | |
164 o 0 i-0 initial commit: a b h |
164 o 0 i-0 initial commit: a b h |
165 |
165 |
166 |
166 |
167 Setup all merge |
|
168 =============== |
|
169 |
|
170 This is done beforehand to validate that the upgrade process creates valid copy |
|
171 information. |
|
172 |
|
167 merging with unrelated change does not interfere with the renames |
173 merging with unrelated change does not interfere with the renames |
168 --------------------------------------------------------------- |
174 --------------------------------------------------------------- |
169 |
175 |
170 - rename on one side |
176 - rename on one side |
171 - unrelated change on the other side |
177 - unrelated change on the other side |
199 o 1 i-1: a -move-> c |
205 o 1 i-1: a -move-> c |
200 | |
206 | |
201 o 0 i-0 initial commit: a b h |
207 o 0 i-0 initial commit: a b h |
202 |
208 |
203 |
209 |
204 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mABm")' |
|
205 A f |
|
206 d |
|
207 R d |
|
208 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBAm")' |
|
209 A f |
|
210 d |
|
211 R d |
|
212 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mABm")' |
|
213 M b |
|
214 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mBAm")' |
|
215 M b |
|
216 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mABm")' |
|
217 M b |
|
218 A f |
|
219 d |
|
220 R d |
|
221 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBAm")' |
|
222 M b |
|
223 A f |
|
224 d |
|
225 R d |
|
226 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mABm")' |
|
227 M b |
|
228 A f |
|
229 a |
|
230 R a |
|
231 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBAm")' |
|
232 M b |
|
233 A f |
|
234 a |
|
235 R a |
|
236 |
210 |
237 merging with the side having a delete |
211 merging with the side having a delete |
238 ------------------------------------- |
212 ------------------------------------- |
239 |
213 |
240 case summary: |
214 case summary: |
278 | |
252 | |
279 o 1 i-1: a -move-> c |
253 o 1 i-1: a -move-> c |
280 | |
254 | |
281 o 0 i-0 initial commit: a b h |
255 o 0 i-0 initial commit: a b h |
282 |
256 |
283 - comparing from the merge |
|
284 |
|
285 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-0")' |
|
286 R d |
|
287 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-0")' |
|
288 R d |
|
289 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-0")' |
|
290 M b |
|
291 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-0")' |
|
292 M b |
|
293 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-0")' |
|
294 M b |
|
295 R d |
|
296 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-0")' |
|
297 M b |
|
298 R d |
|
299 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-0")' |
|
300 M b |
|
301 R a |
|
302 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-0")' |
|
303 M b |
|
304 R a |
|
305 |
|
306 - comparing with the merge children re-adding the file |
|
307 |
|
308 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-1")' |
|
309 M d |
|
310 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-1")' |
|
311 M d |
|
312 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-1")' |
|
313 M b |
|
314 A d |
|
315 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-1")' |
|
316 M b |
|
317 A d |
|
318 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-1")' |
|
319 M b |
|
320 M d |
|
321 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-1")' |
|
322 M b |
|
323 M d |
|
324 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-1")' |
|
325 M b |
|
326 A d |
|
327 R a |
|
328 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-1")' |
|
329 M b |
|
330 A d |
|
331 R a |
|
332 |
257 |
333 Comparing with a merge re-adding the file afterward |
258 Comparing with a merge re-adding the file afterward |
334 --------------------------------------------------- |
259 --------------------------------------------------- |
335 |
260 |
336 Merge: |
261 Merge: |
365 | |
290 | |
366 o 1 i-1: a -move-> c |
291 o 1 i-1: a -move-> c |
367 | |
292 | |
368 o 0 i-0 initial commit: a b h |
293 o 0 i-0 initial commit: a b h |
369 |
294 |
370 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBDm-0")' |
|
371 M d |
|
372 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mDBm-0")' |
|
373 M d |
|
374 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mBDm-0")' |
|
375 M b |
|
376 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDBm-0")' |
|
377 M b |
|
378 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBDm-0")' |
|
379 M b |
|
380 M d |
|
381 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mDBm-0")' |
|
382 M b |
|
383 M d |
|
384 |
|
385 The bugs makes recorded copy is different depending of where we started the merge from since |
|
386 |
|
387 $ hg manifest --debug --rev 'desc("mBDm-0")' | grep '644 d' |
|
388 b004912a8510032a0350a74daa2803dadfb00e12 644 d |
|
389 $ hg manifest --debug --rev 'desc("mDBm-0")' | grep '644 d' |
|
390 b004912a8510032a0350a74daa2803dadfb00e12 644 d |
|
391 |
|
392 $ hg manifest --debug --rev 'desc("d-2")' | grep '644 d' |
|
393 b004912a8510032a0350a74daa2803dadfb00e12 644 d |
|
394 $ hg manifest --debug --rev 'desc("b-1")' | grep '644 d' |
|
395 169be882533bc917905d46c0c951aa9a1e288dcf 644 d (no-changeset !) |
|
396 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 644 d (changeset !) |
|
397 $ hg debugindex d |
|
398 rev linkrev nodeid p1 p2 |
|
399 0 2 169be882533b 000000000000 000000000000 (no-changeset !) |
|
400 0 2 b789fdd96dc2 000000000000 000000000000 (changeset !) |
|
401 1 8 b004912a8510 000000000000 000000000000 |
|
402 |
|
403 Log output should not include a merge commit as it did not happen |
|
404 |
|
405 #if no-changeset |
|
406 $ hg log -Gfr 'desc("mBDm-0")' d |
|
407 o 8 d-2 re-add d |
|
408 | |
|
409 ~ |
|
410 #else |
|
411 $ hg log -Gfr 'desc("mBDm-0")' d |
|
412 o 8 d-2 re-add d |
|
413 | |
|
414 ~ |
|
415 #endif |
|
416 |
|
417 #if no-changeset |
|
418 $ hg log -Gfr 'desc("mDBm-0")' d |
|
419 o 8 d-2 re-add d |
|
420 | |
|
421 ~ |
|
422 #else |
|
423 $ hg log -Gfr 'desc("mDBm-0")' d |
|
424 o 8 d-2 re-add d |
|
425 | |
|
426 ~ |
|
427 #endif |
|
428 |
|
429 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBDm-0")' |
|
430 M b |
|
431 A d |
|
432 R a |
|
433 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDBm-0")' |
|
434 M b |
|
435 A d |
|
436 R a |
|
437 |
295 |
438 |
296 |
439 Comparing with a merge with colliding rename |
297 Comparing with a merge with colliding rename |
440 -------------------------------------------- |
298 -------------------------------------------- |
441 |
299 |
457 (branch merge, don't forget to commit) |
315 (branch merge, don't forget to commit) |
458 $ hg ci -m 'mEAm-0 simple merge - the other way' |
316 $ hg ci -m 'mEAm-0 simple merge - the other way' |
459 created new head |
317 created new head |
460 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))' |
318 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))' |
461 @ 20 mEAm-0 simple merge - the other way |
319 @ 20 mEAm-0 simple merge - the other way |
320 |\ |
|
321 +---o 19 mAEm-0 simple merge - one way |
|
322 | |/ |
|
323 | o 10 e-2 g -move-> f |
|
324 | | |
|
325 | o 9 e-1 b -move-> g |
|
326 | | |
|
327 o | 4 a-2: e -move-> f |
|
328 | | |
|
329 o | 3 a-1: d -move-> e |
|
330 |/ |
|
331 o 2 i-2: c -move-> d |
|
332 | |
|
333 o 1 i-1: a -move-> c |
|
334 | |
|
335 o 0 i-0 initial commit: a b h |
|
336 |
|
337 |
|
338 |
|
339 Merge: |
|
340 - one with change to an unrelated file (b) |
|
341 - one overwriting a file (d) with a rename (from h to i to d) |
|
342 |
|
343 $ hg up 'desc("i-2")' |
|
344 2 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
345 $ hg mv h i |
|
346 $ hg commit -m "f-1: rename h -> i" |
|
347 created new head |
|
348 $ hg mv --force i d |
|
349 $ hg commit -m "f-2: rename i -> d" |
|
350 $ hg debugindex d |
|
351 rev linkrev nodeid p1 p2 |
|
352 0 2 169be882533b 000000000000 000000000000 (no-changeset !) |
|
353 0 2 b789fdd96dc2 000000000000 000000000000 (changeset !) |
|
354 1 8 b004912a8510 000000000000 000000000000 |
|
355 2 22 4a067cf8965d 000000000000 000000000000 (no-changeset !) |
|
356 2 22 fe6f8b4f507f 000000000000 000000000000 (changeset !) |
|
357 $ hg up 'desc("b-1")' |
|
358 3 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
359 $ hg merge 'desc("f-2")' |
|
360 1 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
361 (branch merge, don't forget to commit) |
|
362 $ hg ci -m 'mBFm-0 simple merge - one way' |
|
363 $ hg up 'desc("f-2")' |
|
364 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
365 $ hg merge 'desc("b-1")' |
|
366 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
367 (branch merge, don't forget to commit) |
|
368 $ hg ci -m 'mFBm-0 simple merge - the other way' |
|
369 created new head |
|
370 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))' |
|
371 @ 24 mFBm-0 simple merge - the other way |
|
372 |\ |
|
373 +---o 23 mBFm-0 simple merge - one way |
|
374 | |/ |
|
375 | o 22 f-2: rename i -> d |
|
376 | | |
|
377 | o 21 f-1: rename h -> i |
|
378 | | |
|
379 o | 5 b-1: b update |
|
380 |/ |
|
381 o 2 i-2: c -move-> d |
|
382 | |
|
383 o 1 i-1: a -move-> c |
|
384 | |
|
385 o 0 i-0 initial commit: a b h |
|
386 |
|
387 |
|
388 |
|
389 Merge: |
|
390 - one with change to a file |
|
391 - one deleting and recreating the file |
|
392 |
|
393 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should |
|
394 consider history and rename on both branch of the merge. |
|
395 |
|
396 $ hg up 'desc("i-2")' |
|
397 3 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
398 $ echo "some update" >> d |
|
399 $ hg commit -m "g-1: update d" |
|
400 created new head |
|
401 $ hg up 'desc("d-2")' |
|
402 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
403 $ hg merge 'desc("g-1")' --tool :union |
|
404 merging d |
|
405 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
406 (branch merge, don't forget to commit) |
|
407 $ hg ci -m 'mDGm-0 simple merge - one way' |
|
408 $ hg up 'desc("g-1")' |
|
409 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
410 $ hg merge 'desc("d-2")' --tool :union |
|
411 merging d |
|
412 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
413 (branch merge, don't forget to commit) |
|
414 $ hg ci -m 'mGDm-0 simple merge - the other way' |
|
415 created new head |
|
416 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))' |
|
417 @ 27 mGDm-0 simple merge - the other way |
|
418 |\ |
|
419 +---o 26 mDGm-0 simple merge - one way |
|
420 | |/ |
|
421 | o 25 g-1: update d |
|
422 | | |
|
423 o | 8 d-2 re-add d |
|
424 | | |
|
425 o | 7 d-1 delete d |
|
426 |/ |
|
427 o 2 i-2: c -move-> d |
|
428 | |
|
429 o 1 i-1: a -move-> c |
|
430 | |
|
431 o 0 i-0 initial commit: a b h |
|
432 |
|
433 |
|
434 |
|
435 Merge: |
|
436 - one with change to a file (d) |
|
437 - one overwriting that file with a rename (from h to i, to d) |
|
438 |
|
439 This case is similar to BF/FB, but an actual merge happens, so both side of the |
|
440 history are relevant. |
|
441 |
|
442 Note: |
|
443 | In this case, the merge get conflicting information since on one side we have |
|
444 | "a -> c -> d". and one the other one we have "h -> i -> d". |
|
445 | |
|
446 | The current code arbitrarily pick one side |
|
447 |
|
448 $ hg up 'desc("f-2")' |
|
449 1 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
450 $ hg merge 'desc("g-1")' --tool :union |
|
451 merging d |
|
452 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
453 (branch merge, don't forget to commit) |
|
454 $ hg ci -m 'mFGm-0 simple merge - one way' |
|
455 created new head |
|
456 $ hg up 'desc("g-1")' |
|
457 2 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
458 $ hg merge 'desc("f-2")' --tool :union |
|
459 merging d |
|
460 1 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
461 (branch merge, don't forget to commit) |
|
462 $ hg ci -m 'mGFm-0 simple merge - the other way' |
|
463 created new head |
|
464 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))' |
|
465 @ 29 mGFm-0 simple merge - the other way |
|
466 |\ |
|
467 +---o 28 mFGm-0 simple merge - one way |
|
468 | |/ |
|
469 | o 25 g-1: update d |
|
470 | | |
|
471 o | 22 f-2: rename i -> d |
|
472 | | |
|
473 o | 21 f-1: rename h -> i |
|
474 |/ |
|
475 o 2 i-2: c -move-> d |
|
476 | |
|
477 o 1 i-1: a -move-> c |
|
478 | |
|
479 o 0 i-0 initial commit: a b h |
|
480 |
|
481 |
|
482 |
|
483 Comparing with merging with a deletion (and keeping the file) |
|
484 ------------------------------------------------------------- |
|
485 |
|
486 Merge: |
|
487 - one removing a file (d) |
|
488 - one updating that file |
|
489 - the merge keep the modified version of the file (canceling the delete) |
|
490 |
|
491 In this case, the file keep on living after the merge. So we should not drop its |
|
492 copy tracing chain. |
|
493 |
|
494 $ hg up 'desc("c-1")' |
|
495 1 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
496 $ hg merge 'desc("g-1")' |
|
497 file 'd' was deleted in local [working copy] but was modified in other [merge rev]. |
|
498 You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved. |
|
499 What do you want to do? u |
|
500 0 files updated, 0 files merged, 0 files removed, 1 files unresolved |
|
501 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon |
|
502 [1] |
|
503 $ hg resolve -t :other d |
|
504 (no more unresolved files) |
|
505 $ hg ci -m "mCGm-0" |
|
506 created new head |
|
507 |
|
508 $ hg up 'desc("g-1")' |
|
509 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
510 $ hg merge 'desc("c-1")' |
|
511 file 'd' was deleted in other [merge rev] but was modified in local [working copy]. |
|
512 You can use (c)hanged version, (d)elete, or leave (u)nresolved. |
|
513 What do you want to do? u |
|
514 0 files updated, 0 files merged, 0 files removed, 1 files unresolved |
|
515 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon |
|
516 [1] |
|
517 $ hg resolve -t :local d |
|
518 (no more unresolved files) |
|
519 $ hg ci -m "mGCm-0" |
|
520 created new head |
|
521 |
|
522 $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))' |
|
523 @ 31 mGCm-0 |
|
524 |\ |
|
525 +---o 30 mCGm-0 |
|
526 | |/ |
|
527 | o 25 g-1: update d |
|
528 | | |
|
529 o | 6 c-1 delete d |
|
530 |/ |
|
531 o 2 i-2: c -move-> d |
|
532 | |
|
533 o 1 i-1: a -move-> c |
|
534 | |
|
535 o 0 i-0 initial commit: a b h |
|
536 |
|
537 |
|
538 |
|
539 |
|
540 Comparing with merge restoring an untouched deleted file |
|
541 -------------------------------------------------------- |
|
542 |
|
543 Merge: |
|
544 - one removing a file (d) |
|
545 - one leaving the file untouched |
|
546 - the merge actively restore the file to the same content. |
|
547 |
|
548 In this case, the file keep on living after the merge. So we should not drop its |
|
549 copy tracing chain. |
|
550 |
|
551 $ hg up 'desc("c-1")' |
|
552 0 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
553 $ hg merge 'desc("b-1")' |
|
554 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
555 (branch merge, don't forget to commit) |
|
556 $ hg revert --rev 'desc("b-1")' d |
|
557 $ hg ci -m "mCB-revert-m-0" |
|
558 created new head |
|
559 |
|
560 $ hg up 'desc("b-1")' |
|
561 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
562 $ hg merge 'desc("c-1")' |
|
563 0 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
564 (branch merge, don't forget to commit) |
|
565 $ hg revert --rev 'desc("b-1")' d |
|
566 $ hg ci -m "mBC-revert-m-0" |
|
567 created new head |
|
568 |
|
569 $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))' |
|
570 @ 33 mBC-revert-m-0 |
|
571 |\ |
|
572 +---o 32 mCB-revert-m-0 |
|
573 | |/ |
|
574 | o 6 c-1 delete d |
|
575 | | |
|
576 o | 5 b-1: b update |
|
577 |/ |
|
578 o 2 i-2: c -move-> d |
|
579 | |
|
580 o 1 i-1: a -move-> c |
|
581 | |
|
582 o 0 i-0 initial commit: a b h |
|
583 |
|
584 |
|
585 |
|
586 $ hg up null --quiet |
|
587 |
|
588 Test copy information chaining |
|
589 ============================== |
|
590 |
|
591 merging with unrelated change does not interfere with the renames |
|
592 --------------------------------------------------------------- |
|
593 |
|
594 - rename on one side |
|
595 - unrelated change on the other side |
|
596 |
|
597 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))' |
|
598 o 12 mABm-0 simple merge - the other way |
|
599 |\ |
|
600 +---o 11 mBAm-0 simple merge - one way |
|
601 | |/ |
|
602 | o 5 b-1: b update |
|
603 | | |
|
604 o | 4 a-2: e -move-> f |
|
605 | | |
|
606 o | 3 a-1: d -move-> e |
|
607 |/ |
|
608 o 2 i-2: c -move-> d |
|
609 | |
|
610 o 1 i-1: a -move-> c |
|
611 | |
|
612 o 0 i-0 initial commit: a b h |
|
613 |
|
614 |
|
615 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mABm")' |
|
616 A f |
|
617 d |
|
618 R d |
|
619 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBAm")' |
|
620 A f |
|
621 d |
|
622 R d |
|
623 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mABm")' |
|
624 M b |
|
625 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mBAm")' |
|
626 M b |
|
627 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mABm")' |
|
628 M b |
|
629 A f |
|
630 d |
|
631 R d |
|
632 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBAm")' |
|
633 M b |
|
634 A f |
|
635 d |
|
636 R d |
|
637 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mABm")' |
|
638 M b |
|
639 A f |
|
640 a |
|
641 R a |
|
642 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBAm")' |
|
643 M b |
|
644 A f |
|
645 a |
|
646 R a |
|
647 |
|
648 merging with the side having a delete |
|
649 ------------------------------------- |
|
650 |
|
651 case summary: |
|
652 - one with change to an unrelated file |
|
653 - one deleting the change |
|
654 and recreate an unrelated file after the merge |
|
655 |
|
656 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))' |
|
657 o 16 mCBm-1 re-add d |
|
658 | |
|
659 o 15 mCBm-0 simple merge - the other way |
|
660 |\ |
|
661 | | o 14 mBCm-1 re-add d |
|
662 | | | |
|
663 +---o 13 mBCm-0 simple merge - one way |
|
664 | |/ |
|
665 | o 6 c-1 delete d |
|
666 | | |
|
667 o | 5 b-1: b update |
|
668 |/ |
|
669 o 2 i-2: c -move-> d |
|
670 | |
|
671 o 1 i-1: a -move-> c |
|
672 | |
|
673 o 0 i-0 initial commit: a b h |
|
674 |
|
675 - comparing from the merge |
|
676 |
|
677 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-0")' |
|
678 R d |
|
679 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-0")' |
|
680 R d |
|
681 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-0")' |
|
682 M b |
|
683 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-0")' |
|
684 M b |
|
685 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-0")' |
|
686 M b |
|
687 R d |
|
688 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-0")' |
|
689 M b |
|
690 R d |
|
691 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-0")' |
|
692 M b |
|
693 R a |
|
694 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-0")' |
|
695 M b |
|
696 R a |
|
697 |
|
698 - comparing with the merge children re-adding the file |
|
699 |
|
700 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-1")' |
|
701 M d |
|
702 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-1")' |
|
703 M d |
|
704 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-1")' |
|
705 M b |
|
706 A d |
|
707 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-1")' |
|
708 M b |
|
709 A d |
|
710 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-1")' |
|
711 M b |
|
712 M d |
|
713 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-1")' |
|
714 M b |
|
715 M d |
|
716 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-1")' |
|
717 M b |
|
718 A d |
|
719 R a |
|
720 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-1")' |
|
721 M b |
|
722 A d |
|
723 R a |
|
724 |
|
725 Comparing with a merge re-adding the file afterward |
|
726 --------------------------------------------------- |
|
727 |
|
728 Merge: |
|
729 - one with change to an unrelated file |
|
730 - one deleting and recreating the change |
|
731 |
|
732 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))' |
|
733 o 18 mDBm-0 simple merge - the other way |
|
734 |\ |
|
735 +---o 17 mBDm-0 simple merge - one way |
|
736 | |/ |
|
737 | o 8 d-2 re-add d |
|
738 | | |
|
739 | o 7 d-1 delete d |
|
740 | | |
|
741 o | 5 b-1: b update |
|
742 |/ |
|
743 o 2 i-2: c -move-> d |
|
744 | |
|
745 o 1 i-1: a -move-> c |
|
746 | |
|
747 o 0 i-0 initial commit: a b h |
|
748 |
|
749 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBDm-0")' |
|
750 M d |
|
751 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mDBm-0")' |
|
752 M d |
|
753 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mBDm-0")' |
|
754 M b |
|
755 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDBm-0")' |
|
756 M b |
|
757 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBDm-0")' |
|
758 M b |
|
759 M d |
|
760 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mDBm-0")' |
|
761 M b |
|
762 M d |
|
763 |
|
764 The bugs makes recorded copy is different depending of where we started the merge from since |
|
765 |
|
766 $ hg manifest --debug --rev 'desc("mBDm-0")' | grep '644 d' |
|
767 b004912a8510032a0350a74daa2803dadfb00e12 644 d |
|
768 $ hg manifest --debug --rev 'desc("mDBm-0")' | grep '644 d' |
|
769 b004912a8510032a0350a74daa2803dadfb00e12 644 d |
|
770 |
|
771 $ hg manifest --debug --rev 'desc("d-2")' | grep '644 d' |
|
772 b004912a8510032a0350a74daa2803dadfb00e12 644 d |
|
773 $ hg manifest --debug --rev 'desc("b-1")' | grep '644 d' |
|
774 169be882533bc917905d46c0c951aa9a1e288dcf 644 d (no-changeset !) |
|
775 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 644 d (changeset !) |
|
776 $ hg debugindex d | head -n 4 |
|
777 rev linkrev nodeid p1 p2 |
|
778 0 2 169be882533b 000000000000 000000000000 (no-changeset !) |
|
779 0 2 b789fdd96dc2 000000000000 000000000000 (changeset !) |
|
780 1 8 b004912a8510 000000000000 000000000000 |
|
781 2 22 4a067cf8965d 000000000000 000000000000 (no-changeset !) |
|
782 2 22 fe6f8b4f507f 000000000000 000000000000 (changeset !) |
|
783 |
|
784 Log output should not include a merge commit as it did not happen |
|
785 |
|
786 #if no-changeset |
|
787 $ hg log -Gfr 'desc("mBDm-0")' d |
|
788 o 8 d-2 re-add d |
|
789 | |
|
790 ~ |
|
791 #else |
|
792 $ hg log -Gfr 'desc("mBDm-0")' d |
|
793 o 8 d-2 re-add d |
|
794 | |
|
795 ~ |
|
796 #endif |
|
797 |
|
798 #if no-changeset |
|
799 $ hg log -Gfr 'desc("mDBm-0")' d |
|
800 o 8 d-2 re-add d |
|
801 | |
|
802 ~ |
|
803 #else |
|
804 $ hg log -Gfr 'desc("mDBm-0")' d |
|
805 o 8 d-2 re-add d |
|
806 | |
|
807 ~ |
|
808 #endif |
|
809 |
|
810 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBDm-0")' |
|
811 M b |
|
812 A d |
|
813 R a |
|
814 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDBm-0")' |
|
815 M b |
|
816 A d |
|
817 R a |
|
818 |
|
819 |
|
820 Comparing with a merge with colliding rename |
|
821 -------------------------------------------- |
|
822 |
|
823 - the "e-" branch renaming b to f (through 'g') |
|
824 - the "a-" branch renaming d to f (through e) |
|
825 |
|
826 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))' |
|
827 o 20 mEAm-0 simple merge - the other way |
|
462 |\ |
828 |\ |
463 +---o 19 mAEm-0 simple merge - one way |
829 +---o 19 mAEm-0 simple merge - one way |
464 | |/ |
830 | |/ |
465 | o 10 e-2 g -move-> f |
831 | o 10 e-2 g -move-> f |
466 | | |
832 | | |
579 |
945 |
580 Merge: |
946 Merge: |
581 - one with change to an unrelated file (b) |
947 - one with change to an unrelated file (b) |
582 - one overwriting a file (d) with a rename (from h to i to d) |
948 - one overwriting a file (d) with a rename (from h to i to d) |
583 |
949 |
584 $ hg up 'desc("i-2")' |
|
585 2 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
586 $ hg mv h i |
|
587 $ hg commit -m "f-1: rename h -> i" |
|
588 created new head |
|
589 $ hg mv --force i d |
|
590 $ hg commit -m "f-2: rename i -> d" |
|
591 $ hg debugindex d |
|
592 rev linkrev nodeid p1 p2 |
|
593 0 2 169be882533b 000000000000 000000000000 (no-changeset !) |
|
594 0 2 b789fdd96dc2 000000000000 000000000000 (changeset !) |
|
595 1 8 b004912a8510 000000000000 000000000000 |
|
596 2 22 4a067cf8965d 000000000000 000000000000 (no-changeset !) |
|
597 2 22 fe6f8b4f507f 000000000000 000000000000 (changeset !) |
|
598 $ hg up 'desc("b-1")' |
|
599 3 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
600 $ hg merge 'desc("f-2")' |
|
601 1 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
602 (branch merge, don't forget to commit) |
|
603 $ hg ci -m 'mBFm-0 simple merge - one way' |
|
604 $ hg up 'desc("f-2")' |
|
605 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
606 $ hg merge 'desc("b-1")' |
|
607 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
608 (branch merge, don't forget to commit) |
|
609 $ hg ci -m 'mFBm-0 simple merge - the other way' |
|
610 created new head |
|
611 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))' |
950 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))' |
612 @ 24 mFBm-0 simple merge - the other way |
951 o 24 mFBm-0 simple merge - the other way |
613 |\ |
952 |\ |
614 +---o 23 mBFm-0 simple merge - one way |
953 +---o 23 mBFm-0 simple merge - one way |
615 | |/ |
954 | |/ |
616 | o 22 f-2: rename i -> d |
955 | o 22 f-2: rename i -> d |
617 | | |
956 | | |
696 - one deleting and recreating the file |
1035 - one deleting and recreating the file |
697 |
1036 |
698 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should |
1037 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should |
699 consider history and rename on both branch of the merge. |
1038 consider history and rename on both branch of the merge. |
700 |
1039 |
701 $ hg up 'desc("i-2")' |
|
702 3 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
703 $ echo "some update" >> d |
|
704 $ hg commit -m "g-1: update d" |
|
705 created new head |
|
706 $ hg up 'desc("d-2")' |
|
707 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
708 $ hg merge 'desc("g-1")' --tool :union |
|
709 merging d |
|
710 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
711 (branch merge, don't forget to commit) |
|
712 $ hg ci -m 'mDGm-0 simple merge - one way' |
|
713 $ hg up 'desc("g-1")' |
|
714 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
715 $ hg merge 'desc("d-2")' --tool :union |
|
716 merging d |
|
717 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
718 (branch merge, don't forget to commit) |
|
719 $ hg ci -m 'mGDm-0 simple merge - the other way' |
|
720 created new head |
|
721 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))' |
1040 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))' |
722 @ 27 mGDm-0 simple merge - the other way |
1041 o 27 mGDm-0 simple merge - the other way |
723 |\ |
1042 |\ |
724 +---o 26 mDGm-0 simple merge - one way |
1043 +---o 26 mDGm-0 simple merge - one way |
725 | |/ |
1044 | |/ |
726 | o 25 g-1: update d |
1045 | o 25 g-1: update d |
727 | | |
1046 | | |
825 | In this case, the merge get conflicting information since on one side we have |
1144 | In this case, the merge get conflicting information since on one side we have |
826 | "a -> c -> d". and one the other one we have "h -> i -> d". |
1145 | "a -> c -> d". and one the other one we have "h -> i -> d". |
827 | |
1146 | |
828 | The current code arbitrarily pick one side |
1147 | The current code arbitrarily pick one side |
829 |
1148 |
830 $ hg up 'desc("f-2")' |
|
831 1 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
832 $ hg merge 'desc("g-1")' --tool :union |
|
833 merging d |
|
834 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
835 (branch merge, don't forget to commit) |
|
836 $ hg ci -m 'mFGm-0 simple merge - one way' |
|
837 created new head |
|
838 $ hg up 'desc("g-1")' |
|
839 2 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
840 $ hg merge 'desc("f-2")' --tool :union |
|
841 merging d |
|
842 1 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
843 (branch merge, don't forget to commit) |
|
844 $ hg ci -m 'mGFm-0 simple merge - the other way' |
|
845 created new head |
|
846 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))' |
1149 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))' |
847 @ 29 mGFm-0 simple merge - the other way |
1150 o 29 mGFm-0 simple merge - the other way |
848 |\ |
1151 |\ |
849 +---o 28 mFGm-0 simple merge - one way |
1152 +---o 28 mFGm-0 simple merge - one way |
850 | |/ |
1153 | |/ |
851 | o 25 g-1: update d |
1154 | o 25 g-1: update d |
852 | | |
1155 | | |
921 ~ |
1224 ~ |
922 #endif |
1225 #endif |
923 |
1226 |
924 #if no-changeset |
1227 #if no-changeset |
925 $ hg log -Gfr 'desc("mGFm-0")' d |
1228 $ hg log -Gfr 'desc("mGFm-0")' d |
926 @ 29 mGFm-0 simple merge - the other way |
1229 o 29 mGFm-0 simple merge - the other way |
927 |\ |
1230 |\ |
928 | o 25 g-1: update d |
1231 | o 25 g-1: update d |
929 | | |
1232 | | |
930 o | 22 f-2: rename i -> d |
1233 o | 22 f-2: rename i -> d |
931 | | |
1234 | | |
937 | |
1240 | |
938 o 0 i-0 initial commit: a b h |
1241 o 0 i-0 initial commit: a b h |
939 |
1242 |
940 #else |
1243 #else |
941 $ hg log -Gfr 'desc("mGFm-0")' d |
1244 $ hg log -Gfr 'desc("mGFm-0")' d |
942 @ 29 mGFm-0 simple merge - the other way |
1245 o 29 mGFm-0 simple merge - the other way |
943 |\ |
1246 |\ |
944 | o 25 g-1: update d |
1247 | o 25 g-1: update d |
945 | | |
1248 | | |
946 o | 22 f-2: rename i -> d |
1249 o | 22 f-2: rename i -> d |
947 |/ |
1250 |/ |
960 - the merge keep the modified version of the file (canceling the delete) |
1263 - the merge keep the modified version of the file (canceling the delete) |
961 |
1264 |
962 In this case, the file keep on living after the merge. So we should not drop its |
1265 In this case, the file keep on living after the merge. So we should not drop its |
963 copy tracing chain. |
1266 copy tracing chain. |
964 |
1267 |
965 $ hg up 'desc("c-1")' |
|
966 1 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
967 $ hg merge 'desc("g-1")' |
|
968 file 'd' was deleted in local [working copy] but was modified in other [merge rev]. |
|
969 You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved. |
|
970 What do you want to do? u |
|
971 0 files updated, 0 files merged, 0 files removed, 1 files unresolved |
|
972 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon |
|
973 [1] |
|
974 $ hg resolve -t :other d |
|
975 (no more unresolved files) |
|
976 $ hg ci -m "mCGm-0" |
|
977 created new head |
|
978 |
|
979 $ hg up 'desc("g-1")' |
|
980 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
981 $ hg merge 'desc("c-1")' |
|
982 file 'd' was deleted in other [merge rev] but was modified in local [working copy]. |
|
983 You can use (c)hanged version, (d)elete, or leave (u)nresolved. |
|
984 What do you want to do? u |
|
985 0 files updated, 0 files merged, 0 files removed, 1 files unresolved |
|
986 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon |
|
987 [1] |
|
988 $ hg resolve -t :local d |
|
989 (no more unresolved files) |
|
990 $ hg ci -m "mGCm-0" |
|
991 created new head |
|
992 |
|
993 $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))' |
1268 $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))' |
994 @ 31 mGCm-0 |
1269 o 31 mGCm-0 |
995 |\ |
1270 |\ |
996 +---o 30 mCGm-0 |
1271 +---o 30 mCGm-0 |
997 | |/ |
1272 | |/ |
998 | o 25 g-1: update d |
1273 | o 25 g-1: update d |
999 | | |
1274 | | |
1033 - the merge actively restore the file to the same content. |
1308 - the merge actively restore the file to the same content. |
1034 |
1309 |
1035 In this case, the file keep on living after the merge. So we should not drop its |
1310 In this case, the file keep on living after the merge. So we should not drop its |
1036 copy tracing chain. |
1311 copy tracing chain. |
1037 |
1312 |
1038 $ hg up 'desc("c-1")' |
|
1039 0 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
1040 $ hg merge 'desc("b-1")' |
|
1041 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
1042 (branch merge, don't forget to commit) |
|
1043 $ hg revert --rev 'desc("b-1")' d |
|
1044 $ hg ci -m "mCB-revert-m-0" |
|
1045 created new head |
|
1046 |
|
1047 $ hg up 'desc("b-1")' |
|
1048 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
1049 $ hg merge 'desc("c-1")' |
|
1050 0 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
1051 (branch merge, don't forget to commit) |
|
1052 $ hg revert --rev 'desc("b-1")' d |
|
1053 $ hg ci -m "mBC-revert-m-0" |
|
1054 created new head |
|
1055 |
|
1056 $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))' |
1313 $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))' |
1057 @ 33 mBC-revert-m-0 |
1314 o 33 mBC-revert-m-0 |
1058 |\ |
1315 |\ |
1059 +---o 32 mCB-revert-m-0 |
1316 +---o 32 mCB-revert-m-0 |
1060 | |/ |
1317 | |/ |
1061 | o 6 c-1 delete d |
1318 | o 6 c-1 delete d |
1062 | | |
1319 | | |