comparison tests/test-rename-merge2.t @ 44237:b4057d001760

merge: when rename was made on both sides, use ancestor as merge base When both sides of a merge have renamed a file to the same place, we would treat that as a "both created" action in merge.py. That means that we'd use an empty diffbase. It seems better to use the copy source as diffbase. That can be done by simply dropping code that prevented us from doing that. I think I did it that way in 57203e0210f8 (copies: calculate mergecopies() based on pathcopies(), 2019-04-11) only to preserve the existing behavior. I also suspect it was just an accident that it behaved that way before that commit. Note that until fa9ad1da2e77 (merge: start using the per-side copy dicts, 2020-01-23), it was non-deterministic (depending on iteration order of the `allsources` set in `copies._fullcopytracing()`) which source was used in the affected test case in test-rename-merge1.t. We could easily have fixed that by sorting them, but now we can instead detect the case (the TODO added in the previous patch). Differential Revision: https://phab.mercurial-scm.org/D7974
author Martin von Zweigbergk <martinvonz@google.com>
date Wed, 22 Jan 2020 13:29:26 -0800
parents 17e12938f8e7
children 35d2afc6966a
comparison
equal deleted inserted replaced
44236:e1ecfc7c84be 44237:b4057d001760
527 -------------- 527 --------------
528 test L:nc a b R:up a b W: - 14 merge b no ancestor 528 test L:nc a b R:up a b W: - 14 merge b no ancestor
529 -------------- 529 --------------
530 all copies found (* = to merge, ! = divergent, % = renamed and deleted): 530 all copies found (* = to merge, ! = divergent, % = renamed and deleted):
531 on local side: 531 on local side:
532 src: 'a' -> dst: 'b' 532 src: 'a' -> dst: 'b' *
533 checking for directory renames 533 checking for directory renames
534 resolving manifests 534 resolving manifests
535 branchmerge: True, force: False, partial: False 535 branchmerge: True, force: False, partial: False
536 ancestor: 924404dff337, local: 86a2aa42fc76+, remote: 8dbce441892a 536 ancestor: 924404dff337, local: 86a2aa42fc76+, remote: 8dbce441892a
537 preserving b for resolve of b 537 preserving b for resolve of b
538 preserving rev for resolve of rev 538 preserving rev for resolve of rev
539 a: remote is newer -> g 539 a: remote is newer -> g
540 getting a 540 getting a
541 b: both created -> m (premerge) 541 b: both renamed from a -> m (premerge)
542 picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) 542 picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
543 merging b 543 merging b
544 my b@86a2aa42fc76+ other b@8dbce441892a ancestor b@000000000000 544 my b@86a2aa42fc76+ other b@8dbce441892a ancestor a@924404dff337
545 premerge successful
545 rev: versions differ -> m (premerge) 546 rev: versions differ -> m (premerge)
546 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) 547 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob)
547 merging rev 548 merging rev
548 my rev@86a2aa42fc76+ other rev@8dbce441892a ancestor rev@924404dff337 549 my rev@86a2aa42fc76+ other rev@8dbce441892a ancestor rev@924404dff337
549 b: both created -> m (merge)
550 picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
551 my b@86a2aa42fc76+ other b@8dbce441892a ancestor b@000000000000
552 launching merge tool: * ../merge *$TESTTMP/t/t/b* * * (glob)
553 merge tool returned: 0
554 rev: versions differ -> m (merge) 550 rev: versions differ -> m (merge)
555 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) 551 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob)
556 my rev@86a2aa42fc76+ other rev@8dbce441892a ancestor rev@924404dff337 552 my rev@86a2aa42fc76+ other rev@8dbce441892a ancestor rev@924404dff337
557 launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) 553 launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob)
558 merge tool returned: 0 554 merge tool returned: 0
609 -------------- 605 --------------
610 test L:nc a b R:up a b W: - 16 get a, merge b no ancestor 606 test L:nc a b R:up a b W: - 16 get a, merge b no ancestor
611 -------------- 607 --------------
612 all copies found (* = to merge, ! = divergent, % = renamed and deleted): 608 all copies found (* = to merge, ! = divergent, % = renamed and deleted):
613 on local side: 609 on local side:
614 src: 'a' -> dst: 'b' 610 src: 'a' -> dst: 'b' *
615 checking for directory renames 611 checking for directory renames
616 resolving manifests 612 resolving manifests
617 branchmerge: True, force: False, partial: False 613 branchmerge: True, force: False, partial: False
618 ancestor: 924404dff337, local: 86a2aa42fc76+, remote: 8dbce441892a 614 ancestor: 924404dff337, local: 86a2aa42fc76+, remote: 8dbce441892a
619 preserving b for resolve of b 615 preserving b for resolve of b
620 preserving rev for resolve of rev 616 preserving rev for resolve of rev
621 a: remote is newer -> g 617 a: remote is newer -> g
622 getting a 618 getting a
623 b: both created -> m (premerge) 619 b: both renamed from a -> m (premerge)
624 picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) 620 picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
625 merging b 621 merging b
626 my b@86a2aa42fc76+ other b@8dbce441892a ancestor b@000000000000 622 my b@86a2aa42fc76+ other b@8dbce441892a ancestor a@924404dff337
623 premerge successful
627 rev: versions differ -> m (premerge) 624 rev: versions differ -> m (premerge)
628 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) 625 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob)
629 merging rev 626 merging rev
630 my rev@86a2aa42fc76+ other rev@8dbce441892a ancestor rev@924404dff337 627 my rev@86a2aa42fc76+ other rev@8dbce441892a ancestor rev@924404dff337
631 b: both created -> m (merge)
632 picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
633 my b@86a2aa42fc76+ other b@8dbce441892a ancestor b@000000000000
634 launching merge tool: * ../merge *$TESTTMP/t/t/b* * * (glob)
635 merge tool returned: 0
636 rev: versions differ -> m (merge) 628 rev: versions differ -> m (merge)
637 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) 629 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob)
638 my rev@86a2aa42fc76+ other rev@8dbce441892a ancestor rev@924404dff337 630 my rev@86a2aa42fc76+ other rev@8dbce441892a ancestor rev@924404dff337
639 launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) 631 launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob)
640 merge tool returned: 0 632 merge tool returned: 0
650 -------------- 642 --------------
651 test L:up a b R:nc a b W: - 17 keep a, merge b no ancestor 643 test L:up a b R:nc a b W: - 17 keep a, merge b no ancestor
652 -------------- 644 --------------
653 all copies found (* = to merge, ! = divergent, % = renamed and deleted): 645 all copies found (* = to merge, ! = divergent, % = renamed and deleted):
654 on remote side: 646 on remote side:
655 src: 'a' -> dst: 'b' 647 src: 'a' -> dst: 'b' *
656 checking for directory renames 648 checking for directory renames
657 resolving manifests 649 resolving manifests
658 branchmerge: True, force: False, partial: False 650 branchmerge: True, force: False, partial: False
659 ancestor: 924404dff337, local: 0b76e65c8289+, remote: 4ce40f5aca24 651 ancestor: 924404dff337, local: 0b76e65c8289+, remote: 4ce40f5aca24
660 preserving b for resolve of b 652 preserving b for resolve of b
661 preserving rev for resolve of rev 653 preserving rev for resolve of rev
662 starting 4 threads for background file closing (?) 654 starting 4 threads for background file closing (?)
663 b: both created -> m (premerge) 655 b: both renamed from a -> m (premerge)
664 picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) 656 picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
665 merging b 657 merging b
666 my b@0b76e65c8289+ other b@4ce40f5aca24 ancestor b@000000000000 658 my b@0b76e65c8289+ other b@4ce40f5aca24 ancestor a@924404dff337
659 premerge successful
667 rev: versions differ -> m (premerge) 660 rev: versions differ -> m (premerge)
668 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) 661 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob)
669 merging rev 662 merging rev
670 my rev@0b76e65c8289+ other rev@4ce40f5aca24 ancestor rev@924404dff337 663 my rev@0b76e65c8289+ other rev@4ce40f5aca24 ancestor rev@924404dff337
671 b: both created -> m (merge)
672 picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
673 my b@0b76e65c8289+ other b@4ce40f5aca24 ancestor b@000000000000
674 launching merge tool: * ../merge *$TESTTMP/t/t/b* * * (glob)
675 merge tool returned: 0
676 rev: versions differ -> m (merge) 664 rev: versions differ -> m (merge)
677 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) 665 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob)
678 my rev@0b76e65c8289+ other rev@4ce40f5aca24 ancestor rev@924404dff337 666 my rev@0b76e65c8289+ other rev@4ce40f5aca24 ancestor rev@924404dff337
679 launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) 667 launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob)
680 merge tool returned: 0 668 merge tool returned: 0
690 -------------- 678 --------------
691 test L:nm a b R:up a b W: - 18 merge b no ancestor 679 test L:nm a b R:up a b W: - 18 merge b no ancestor
692 -------------- 680 --------------
693 all copies found (* = to merge, ! = divergent, % = renamed and deleted): 681 all copies found (* = to merge, ! = divergent, % = renamed and deleted):
694 on local side: 682 on local side:
695 src: 'a' -> dst: 'b' 683 src: 'a' -> dst: 'b' *
696 checking for directory renames 684 checking for directory renames
697 resolving manifests 685 resolving manifests
698 branchmerge: True, force: False, partial: False 686 branchmerge: True, force: False, partial: False
699 ancestor: 924404dff337, local: 02963e448370+, remote: 8dbce441892a 687 ancestor: 924404dff337, local: 02963e448370+, remote: 8dbce441892a
700 preserving b for resolve of b 688 preserving b for resolve of b
701 preserving rev for resolve of rev 689 preserving rev for resolve of rev
702 starting 4 threads for background file closing (?) 690 starting 4 threads for background file closing (?)
703 a: prompt deleted/changed -> m (premerge) 691 b: both renamed from a -> m (premerge)
704 picked tool ':prompt' for a (binary False symlink False changedelete True)
705 file 'a' was deleted in local [working copy] but was modified in other [merge rev].
706 You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved.
707 What do you want to do? u
708 b: both created -> m (premerge)
709 picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) 692 picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
710 merging b 693 merging b
711 my b@02963e448370+ other b@8dbce441892a ancestor b@000000000000 694 my b@02963e448370+ other b@8dbce441892a ancestor a@924404dff337
695 premerge successful
712 rev: versions differ -> m (premerge) 696 rev: versions differ -> m (premerge)
713 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) 697 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob)
714 merging rev 698 merging rev
715 my rev@02963e448370+ other rev@8dbce441892a ancestor rev@924404dff337 699 my rev@02963e448370+ other rev@8dbce441892a ancestor rev@924404dff337
716 b: both created -> m (merge)
717 picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
718 my b@02963e448370+ other b@8dbce441892a ancestor b@000000000000
719 launching merge tool: * ../merge *$TESTTMP/t/t/b* * * (glob)
720 merge tool returned: 0
721 rev: versions differ -> m (merge) 700 rev: versions differ -> m (merge)
722 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) 701 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob)
723 my rev@02963e448370+ other rev@8dbce441892a ancestor rev@924404dff337 702 my rev@02963e448370+ other rev@8dbce441892a ancestor rev@924404dff337
724 launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) 703 launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob)
725 merge tool returned: 0 704 merge tool returned: 0
726 0 files updated, 2 files merged, 0 files removed, 1 files unresolved 705 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
727 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon 706 (branch merge, don't forget to commit)
728 -------------- 707 --------------
729 M a 708 M b
730 M b
731 abort: unresolved merge conflicts (see 'hg help resolve')
732 -------------- 709 --------------
733 710
734 $ tm "up a b" "nm a b" " " "19 merge b no ancestor, prompt remove a" 711 $ tm "up a b" "nm a b" " " "19 merge b no ancestor, prompt remove a"
735 created new head 712 created new head
736 -------------- 713 --------------
737 test L:up a b R:nm a b W: - 19 merge b no ancestor, prompt remove a 714 test L:up a b R:nm a b W: - 19 merge b no ancestor, prompt remove a
738 -------------- 715 --------------
739 all copies found (* = to merge, ! = divergent, % = renamed and deleted): 716 all copies found (* = to merge, ! = divergent, % = renamed and deleted):
740 on remote side: 717 on remote side:
741 src: 'a' -> dst: 'b' 718 src: 'a' -> dst: 'b' *
742 checking for directory renames 719 checking for directory renames
743 resolving manifests 720 resolving manifests
744 branchmerge: True, force: False, partial: False 721 branchmerge: True, force: False, partial: False
745 ancestor: 924404dff337, local: 0b76e65c8289+, remote: bdb19105162a 722 ancestor: 924404dff337, local: 0b76e65c8289+, remote: bdb19105162a
746 preserving a for resolve of a 723 preserving b for resolve of b
747 preserving b for resolve of b 724 preserving rev for resolve of rev
748 preserving rev for resolve of rev 725 b: both renamed from a -> m (premerge)
749 starting 4 threads for background file closing (?) 726 starting 4 threads for background file closing (?)
750 a: prompt changed/deleted -> m (premerge)
751 picked tool ':prompt' for a (binary False symlink False changedelete True)
752 file 'a' was deleted in other [merge rev] but was modified in local [working copy].
753 You can use (c)hanged version, (d)elete, or leave (u)nresolved.
754 What do you want to do? u
755 b: both created -> m (premerge)
756 picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) 727 picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
757 merging b 728 merging b
758 my b@0b76e65c8289+ other b@bdb19105162a ancestor b@000000000000 729 my b@0b76e65c8289+ other b@bdb19105162a ancestor a@924404dff337
730 premerge successful
759 rev: versions differ -> m (premerge) 731 rev: versions differ -> m (premerge)
760 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) 732 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob)
761 merging rev 733 merging rev
762 my rev@0b76e65c8289+ other rev@bdb19105162a ancestor rev@924404dff337 734 my rev@0b76e65c8289+ other rev@bdb19105162a ancestor rev@924404dff337
763 b: both created -> m (merge)
764 picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
765 my b@0b76e65c8289+ other b@bdb19105162a ancestor b@000000000000
766 launching merge tool: * ../merge *$TESTTMP/t/t/b* * * (glob)
767 merge tool returned: 0
768 rev: versions differ -> m (merge) 735 rev: versions differ -> m (merge)
769 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) 736 picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob)
770 my rev@0b76e65c8289+ other rev@bdb19105162a ancestor rev@924404dff337 737 my rev@0b76e65c8289+ other rev@bdb19105162a ancestor rev@924404dff337
771 launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) 738 launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob)
772 merge tool returned: 0 739 merge tool returned: 0
773 0 files updated, 2 files merged, 0 files removed, 1 files unresolved 740 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
774 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon 741 (branch merge, don't forget to commit)
775 -------------- 742 --------------
776 M b 743 M b
777 C a 744 C a
778 abort: unresolved merge conflicts (see 'hg help resolve')
779 -------------- 745 --------------
780 746
781 $ tm "up a " "um a b" " " "20 merge a and b to b, remove a" 747 $ tm "up a " "um a b" " " "20 merge a and b to b, remove a"
782 created new head 748 created new head
783 -------------- 749 --------------