Mercurial > hg
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 -------------- |