comparison tests/test-rebase-obsolete.t @ 27746:f0e9f38d250f

rebase: prevent creating divergence Before this patch rebase would create divergence when you were rebasing obsolete changesets on a destination not containing one of its successors. This patch introduces rebase.allowdivergence to explicitly allow divergence creation with rebase.
author Laurent Charignon <lcharignon@fb.com>
date Tue, 12 Jan 2016 13:43:41 -0800
parents f9e755736b0e
children bb14a81ce647
comparison
equal deleted inserted replaced
27745:d3a128e8604a 27746:f0e9f38d250f
710 $ hg debugobsolete `hg log -r 11 -T '{node}\n'` --config experimental.evolution=all 710 $ hg debugobsolete `hg log -r 11 -T '{node}\n'` --config experimental.evolution=all
711 $ hg rebase -r . -d 10 711 $ hg rebase -r . -d 10
712 abort: all requested changesets have equivalents or were marked as obsolete 712 abort: all requested changesets have equivalents or were marked as obsolete
713 (to force the rebase, set the config experimental.rebaseskipobsolete to False) 713 (to force the rebase, set the config experimental.rebaseskipobsolete to False)
714 [255] 714 [255]
715
716 If a rebase is going to create divergence, it should abort
717
718 $ hg log -G
719 @ 11:f44da1f4954c nonrelevant
720 |
721 | o 10:121d9e3bc4c6 P
722 |/
723 o 9:4be60e099a77 C
724 |
725 o 6:9c48361117de D
726 |
727 o 2:261e70097290 B2
728 |
729 o 0:4a2df7238c3b A
730
731
732 $ hg up 9
733 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
734 $ echo "john" > doe
735 $ hg add doe
736 $ hg commit -m "john doe"
737 created new head
738 $ hg up 10
739 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
740 $ echo "foo" > bar
741 $ hg add bar
742 $ hg commit --amend -m "10'"
743 $ hg up 10 --hidden
744 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
745 $ echo "bar" > foo
746 $ hg add foo
747 $ hg commit -m "bar foo"
748 $ hg log -G
749 @ 15:73568ab6879d bar foo
750 |
751 | o 14:77d874d096a2 10'
752 | |
753 | | o 12:3eb461388009 john doe
754 | |/
755 x | 10:121d9e3bc4c6 P
756 |/
757 o 9:4be60e099a77 C
758 |
759 o 6:9c48361117de D
760 |
761 o 2:261e70097290 B2
762 |
763 o 0:4a2df7238c3b A
764
765 $ hg summary
766 parent: 15:73568ab6879d tip
767 bar foo
768 branch: default
769 commit: (clean)
770 update: 2 new changesets, 3 branch heads (merge)
771 phases: 8 draft
772 unstable: 1 changesets
773 $ hg rebase -s 10 -d 12
774 abort: this rebase will cause divergence
775 (to force the rebase please set rebase.allowdivergence=True)
776 [255]
777 $ hg log -G
778 @ 15:73568ab6879d bar foo
779 |
780 | o 14:77d874d096a2 10'
781 | |
782 | | o 12:3eb461388009 john doe
783 | |/
784 x | 10:121d9e3bc4c6 P
785 |/
786 o 9:4be60e099a77 C
787 |
788 o 6:9c48361117de D
789 |
790 o 2:261e70097290 B2
791 |
792 o 0:4a2df7238c3b A
793
794 With rebase.allowdivergence=True, rebase can create divergence
795
796 $ hg rebase -s 10 -d 12 --config rebase.allowdivergence=True
797 rebasing 10:121d9e3bc4c6 "P"
798 rebasing 15:73568ab6879d "bar foo" (tip)
799 $ hg summary
800 parent: 17:61bd55f69bc4 tip
801 bar foo
802 branch: default
803 commit: (clean)
804 update: 1 new changesets, 2 branch heads (merge)
805 phases: 8 draft
806 divergent: 2 changesets
807