test-rebase-obsolete.t
2140 lines
| 51.7 KiB
| text/troff
|
Tads3Lexer
/ tests / test-rebase-obsolete.t
|
r17612 | ========================== | ||
Test rebase with obsolete | ||||
========================== | ||||
Enable obsolete | ||||
$ cat >> $HGRCPATH << EOF | ||||
> [ui] | ||||
|
r35047 | > logtemplate= {rev}:{node|short} {desc|firstline}{if(obsolete,' ({obsfate})')} | ||
|
r22955 | > [experimental] | ||
|
r34867 | > evolution.createmarkers=True | ||
|
r34868 | > evolution.allowunstable=True | ||
|
r17612 | > [phases] | ||
> publish=False | ||||
|
r27011 | > [extensions] | ||
|
r17612 | > rebase= | ||
|
r33640 | > drawdag=$TESTDIR/drawdag.py | ||
|
r39128 | > strip= | ||
|
r17612 | > EOF | ||
Setup rebase canonical repo | ||||
$ hg init base | ||||
$ cd base | ||||
$ hg unbundle "$TESTDIR/bundles/rebase.hg" | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 8 changesets with 7 changes to 7 files (+2 heads) | ||||
|
r39516 | new changesets cd010b8cd998:02de42196ebe (8 drafts) | ||
|
r17612 | (run 'hg heads' to see heads, 'hg merge' to merge) | ||
$ hg up tip | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg log -G | ||||
@ 7:02de42196ebe H | ||||
| | ||||
| o 6:eea13746799a G | ||||
|/| | ||||
o | 5:24b6387c8c8c F | ||||
| | | ||||
| o 4:9520eea781bc E | ||||
|/ | ||||
| o 3:32af7686d403 D | ||||
| | | ||||
| o 2:5fddd98957c8 C | ||||
| | | ||||
| o 1:42ccdea3bb16 B | ||||
|/ | ||||
o 0:cd010b8cd998 A | ||||
$ cd .. | ||||
simple rebase | ||||
--------------------------------- | ||||
$ hg clone base simple | ||||
updating to branch default | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd simple | ||||
$ hg up 32af7686d403 | ||||
3 files updated, 0 files merged, 2 files removed, 0 files unresolved | ||||
$ hg rebase -d eea13746799a | ||||
|
r23517 | rebasing 1:42ccdea3bb16 "B" | ||
rebasing 2:5fddd98957c8 "C" | ||||
rebasing 3:32af7686d403 "D" | ||||
|
r17612 | $ hg log -G | ||
@ 10:8eeb3c33ad33 D | ||||
| | ||||
o 9:2327fea05063 C | ||||
| | ||||
o 8:e4e5be0395b2 B | ||||
| | ||||
| o 7:02de42196ebe H | ||||
| | | ||||
o | 6:eea13746799a G | ||||
|\| | ||||
| o 5:24b6387c8c8c F | ||||
| | | ||||
o | 4:9520eea781bc E | ||||
|/ | ||||
o 0:cd010b8cd998 A | ||||
$ hg log --hidden -G | ||||
@ 10:8eeb3c33ad33 D | ||||
| | ||||
o 9:2327fea05063 C | ||||
| | ||||
o 8:e4e5be0395b2 B | ||||
| | ||||
| o 7:02de42196ebe H | ||||
| | | ||||
o | 6:eea13746799a G | ||||
|\| | ||||
| o 5:24b6387c8c8c F | ||||
| | | ||||
o | 4:9520eea781bc E | ||||
|/ | ||||
|
r35047 | | x 3:32af7686d403 D (rewritten using rebase as 10:8eeb3c33ad33) | ||
|
r17612 | | | | ||
|
r35047 | | x 2:5fddd98957c8 C (rewritten using rebase as 9:2327fea05063) | ||
|
r17612 | | | | ||
|
r35047 | | x 1:42ccdea3bb16 B (rewritten using rebase as 8:e4e5be0395b2) | ||
|
r17612 | |/ | ||
o 0:cd010b8cd998 A | ||||
$ hg debugobsolete | ||||
|
r34962 | 42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 e4e5be0395b2cbd471ed22a26b1b6a1a0658a794 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} | ||
5fddd98957c8a54a4d436dfe1da9d87f21a1b97b 2327fea05063f39961b14cb69435a9898dc9a245 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} | ||||
32af7686d403cf45b5d95f2d70cebea587ac806a 8eeb3c33ad33d452c89e5dcf611c347f978fb42b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} | ||||
|
r17612 | |||
$ cd .. | ||||
empty changeset | ||||
--------------------------------- | ||||
$ hg clone base empty | ||||
updating to branch default | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd empty | ||||
$ hg up eea13746799a | ||||
1 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
We make a copy of both the first changeset in the rebased and some other in the | ||||
set. | ||||
$ hg graft 42ccdea3bb16 32af7686d403 | ||||
|
r23505 | grafting 1:42ccdea3bb16 "B" | ||
grafting 3:32af7686d403 "D" | ||||
|
r17612 | $ hg rebase -s 42ccdea3bb16 -d . | ||
|
r23517 | rebasing 1:42ccdea3bb16 "B" | ||
|
r40900 | note: not rebasing 1:42ccdea3bb16 "B", its destination already has all its changes | ||
|
r23517 | rebasing 2:5fddd98957c8 "C" | ||
rebasing 3:32af7686d403 "D" | ||||
|
r40900 | note: not rebasing 3:32af7686d403 "D", its destination already has all its changes | ||
|
r17612 | $ hg log -G | ||
|
r19925 | o 10:5ae4c968c6ac C | ||
|
r17612 | | | ||
|
r19925 | @ 9:08483444fef9 D | ||
|
r17612 | | | ||
o 8:8877864f1edb B | ||||
| | ||||
| o 7:02de42196ebe H | ||||
| | | ||||
o | 6:eea13746799a G | ||||
|\| | ||||
| o 5:24b6387c8c8c F | ||||
| | | ||||
o | 4:9520eea781bc E | ||||
|/ | ||||
o 0:cd010b8cd998 A | ||||
$ hg log --hidden -G | ||||
|
r19925 | o 10:5ae4c968c6ac C | ||
|
r17612 | | | ||
|
r19925 | @ 9:08483444fef9 D | ||
|
r17612 | | | ||
o 8:8877864f1edb B | ||||
| | ||||
| o 7:02de42196ebe H | ||||
| | | ||||
o | 6:eea13746799a G | ||||
|\| | ||||
| o 5:24b6387c8c8c F | ||||
| | | ||||
o | 4:9520eea781bc E | ||||
|/ | ||||
|
r35047 | | x 3:32af7686d403 D (pruned using rebase) | ||
|
r17612 | | | | ||
|
r35047 | | x 2:5fddd98957c8 C (rewritten using rebase as 10:5ae4c968c6ac) | ||
|
r17612 | | | | ||
|
r35047 | | x 1:42ccdea3bb16 B (pruned using rebase) | ||
|
r17612 | |/ | ||
o 0:cd010b8cd998 A | ||||
$ hg debugobsolete | ||||
|
r34962 | 42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 0 {cd010b8cd998f3981a5a8115f94f8da4ab506089} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'rebase', 'user': 'test'} | ||
5fddd98957c8a54a4d436dfe1da9d87f21a1b97b 5ae4c968c6aca831df823664e706c9d4aa34473d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} | ||||
32af7686d403cf45b5d95f2d70cebea587ac806a 0 {5fddd98957c8a54a4d436dfe1da9d87f21a1b97b} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'rebase', 'user': 'test'} | ||||
|
r18444 | |||
|
r31295 | More complex case where part of the rebase set were already rebased | ||
|
r18444 | |||
$ hg rebase --rev 'desc(D)' --dest 'desc(H)' | ||||
|
r23517 | rebasing 9:08483444fef9 "D" | ||
|
r35727 | 1 new orphan changesets | ||
|
r18444 | $ hg debugobsolete | ||
|
r34962 | 42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 0 {cd010b8cd998f3981a5a8115f94f8da4ab506089} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'rebase', 'user': 'test'} | ||
5fddd98957c8a54a4d436dfe1da9d87f21a1b97b 5ae4c968c6aca831df823664e706c9d4aa34473d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} | ||||
32af7686d403cf45b5d95f2d70cebea587ac806a 0 {5fddd98957c8a54a4d436dfe1da9d87f21a1b97b} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'rebase', 'user': 'test'} | ||||
08483444fef91d6224f6655ee586a65d263ad34c 4596109a6a4328c398bde3a4a3b6737cfade3003 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} | ||||
|
r18444 | $ hg log -G | ||
|
r19861 | @ 11:4596109a6a43 D | ||
|
r18444 | | | ||
r35524 | | * 10:5ae4c968c6ac C | |||
|
r18444 | | | | ||
|
r35047 | | x 9:08483444fef9 D (rewritten using rebase as 11:4596109a6a43) | ||
|
r18444 | | | | ||
| o 8:8877864f1edb B | ||||
| | | ||||
o | 7:02de42196ebe H | ||||
| | | ||||
| o 6:eea13746799a G | ||||
|/| | ||||
o | 5:24b6387c8c8c F | ||||
| | | ||||
| o 4:9520eea781bc E | ||||
|/ | ||||
o 0:cd010b8cd998 A | ||||
|
r26349 | $ hg rebase --source 'desc(B)' --dest 'tip' --config experimental.rebaseskipobsolete=True | ||
|
r34010 | rebasing 8:8877864f1edb "B" | ||
|
r34011 | note: not rebasing 9:08483444fef9 "D", already in destination as 11:4596109a6a43 "D" (tip) | ||
|
r23517 | rebasing 10:5ae4c968c6ac "C" | ||
|
r18444 | $ hg debugobsolete | ||
|
r34962 | 42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 0 {cd010b8cd998f3981a5a8115f94f8da4ab506089} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'rebase', 'user': 'test'} | ||
5fddd98957c8a54a4d436dfe1da9d87f21a1b97b 5ae4c968c6aca831df823664e706c9d4aa34473d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} | ||||
32af7686d403cf45b5d95f2d70cebea587ac806a 0 {5fddd98957c8a54a4d436dfe1da9d87f21a1b97b} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'rebase', 'user': 'test'} | ||||
08483444fef91d6224f6655ee586a65d263ad34c 4596109a6a4328c398bde3a4a3b6737cfade3003 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} | ||||
8877864f1edb05d0e07dc4ba77b67a80a7b86672 462a34d07e599b87ea08676a449373fe4e2e1347 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} | ||||
5ae4c968c6aca831df823664e706c9d4aa34473d 98f6af4ee9539e14da4465128f894c274900b6e5 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} | ||||
|
r33770 | $ hg log --rev 'contentdivergent()' | ||
|
r18444 | $ hg log -G | ||
|
r19925 | o 13:98f6af4ee953 C | ||
|
r18444 | | | ||
|
r19861 | o 12:462a34d07e59 B | ||
|
r18444 | | | ||
|
r19925 | @ 11:4596109a6a43 D | ||
|
r18444 | | | ||
o 7:02de42196ebe H | ||||
| | ||||
| o 6:eea13746799a G | ||||
|/| | ||||
o | 5:24b6387c8c8c F | ||||
| | | ||||
| o 4:9520eea781bc E | ||||
|/ | ||||
o 0:cd010b8cd998 A | ||||
|
r19861 | $ hg log --style default --debug -r 4596109a6a4328c398bde3a4a3b6737cfade3003 | ||
changeset: 11:4596109a6a4328c398bde3a4a3b6737cfade3003 | ||||
phase: draft | ||||
parent: 7:02de42196ebee42ef284b6780a87cdc96e8eaab6 | ||||
parent: -1:0000000000000000000000000000000000000000 | ||||
manifest: 11:a91006e3a02f1edf631f7018e6e5684cf27dd905 | ||||
user: Nicolas Dumazet <nicdumz.commits@gmail.com> | ||||
date: Sat Apr 30 15:24:48 2011 +0200 | ||||
files+: D | ||||
extra: branch=default | ||||
extra: rebase_source=08483444fef91d6224f6655ee586a65d263ad34c | ||||
extra: source=32af7686d403cf45b5d95f2d70cebea587ac806a | ||||
description: | ||||
D | ||||
|
r26902 | $ hg up -qr 'desc(G)' | ||
$ hg graft 4596109a6a4328c398bde3a4a3b6737cfade3003 | ||||
grafting 11:4596109a6a43 "D" | ||||
$ hg up -qr 'desc(E)' | ||||
$ hg rebase -s tip -d . | ||||
|
r27974 | rebasing 14:9e36056a46e3 "D" (tip) | ||
|
r26902 | $ hg log --style default --debug -r tip | ||
|
r27974 | changeset: 15:627d4614809036ba22b9e7cb31638ddc06ab99ab | ||
|
r26902 | tag: tip | ||
phase: draft | ||||
parent: 4:9520eea781bcca16c1e15acc0ba14335a0e8e5ba | ||||
parent: -1:0000000000000000000000000000000000000000 | ||||
manifest: 15:648e8ede73ae3e497d093d3a4c8fcc2daa864f42 | ||||
user: Nicolas Dumazet <nicdumz.commits@gmail.com> | ||||
date: Sat Apr 30 15:24:48 2011 +0200 | ||||
files+: D | ||||
extra: branch=default | ||||
extra: intermediate-source=4596109a6a4328c398bde3a4a3b6737cfade3003 | ||||
|
r27974 | extra: rebase_source=9e36056a46e37c9776168c7375734eebc70e294f | ||
|
r26902 | extra: source=32af7686d403cf45b5d95f2d70cebea587ac806a | ||
description: | ||||
D | ||||
|
r31295 | Start rebase from a commit that is obsolete but not hidden only because it's | ||
a working copy parent. We should be moved back to the starting commit as usual | ||||
even though it is hidden (until we're moved there). | ||||
$ hg --hidden up -qr 'first(hidden())' | ||||
|
r37939 | updated to hidden changeset 42ccdea3bb16 | ||
|
r35729 | (hidden revision '42ccdea3bb16' is pruned) | ||
|
r31295 | $ hg rebase --rev 13 --dest 15 | ||
rebasing 13:98f6af4ee953 "C" | ||||
|
r31297 | $ hg log -G | ||
o 16:294a2b93eb4d C | ||||
| | ||||
o 15:627d46148090 D | ||||
| | ||||
| o 12:462a34d07e59 B | ||||
| | | ||||
| o 11:4596109a6a43 D | ||||
| | | ||||
| o 7:02de42196ebe H | ||||
| | | ||||
+---o 6:eea13746799a G | ||||
| |/ | ||||
| o 5:24b6387c8c8c F | ||||
| | | ||||
o | 4:9520eea781bc E | ||||
|/ | ||||
|
r35047 | | @ 1:42ccdea3bb16 B (pruned using rebase) | ||
|
r31297 | |/ | ||
o 0:cd010b8cd998 A | ||||
|
r31295 | |||
|
r17612 | $ cd .. | ||
|
r17613 | collapse rebase | ||
--------------------------------- | ||||
$ hg clone base collapse | ||||
updating to branch default | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd collapse | ||||
$ hg rebase -s 42ccdea3bb16 -d eea13746799a --collapse | ||||
|
r23517 | rebasing 1:42ccdea3bb16 "B" | ||
rebasing 2:5fddd98957c8 "C" | ||||
rebasing 3:32af7686d403 "D" | ||||
|
r17613 | $ hg log -G | ||
|
r19925 | o 8:4dc2197e807b Collapsed revision | ||
|
r17613 | | | ||
|
r19925 | | @ 7:02de42196ebe H | ||
|
r17613 | | | | ||
o | 6:eea13746799a G | ||||
|\| | ||||
| o 5:24b6387c8c8c F | ||||
| | | ||||
o | 4:9520eea781bc E | ||||
|/ | ||||
o 0:cd010b8cd998 A | ||||
$ hg log --hidden -G | ||||
|
r19925 | o 8:4dc2197e807b Collapsed revision | ||
|
r17613 | | | ||
|
r19925 | | @ 7:02de42196ebe H | ||
|
r17613 | | | | ||
o | 6:eea13746799a G | ||||
|\| | ||||
| o 5:24b6387c8c8c F | ||||
| | | ||||
o | 4:9520eea781bc E | ||||
|/ | ||||
|
r35047 | | x 3:32af7686d403 D (rewritten using rebase as 8:4dc2197e807b) | ||
|
r17613 | | | | ||
|
r35047 | | x 2:5fddd98957c8 C (rewritten using rebase as 8:4dc2197e807b) | ||
|
r17613 | | | | ||
|
r35047 | | x 1:42ccdea3bb16 B (rewritten using rebase as 8:4dc2197e807b) | ||
|
r17613 | |/ | ||
o 0:cd010b8cd998 A | ||||
|
r19924 | $ hg id --debug -r tip | ||
|
r17613 | 4dc2197e807bae9817f09905b50ab288be2dbbcf tip | ||
$ hg debugobsolete | ||||
|
r40078 | 42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 4dc2197e807bae9817f09905b50ab288be2dbbcf 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'fold-id': '6fb65cdc', 'fold-idx': '1', 'fold-size': '3', 'operation': 'rebase', 'user': 'test'} | ||
5fddd98957c8a54a4d436dfe1da9d87f21a1b97b 4dc2197e807bae9817f09905b50ab288be2dbbcf 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'fold-id': '6fb65cdc', 'fold-idx': '2', 'fold-size': '3', 'operation': 'rebase', 'user': 'test'} | ||||
32af7686d403cf45b5d95f2d70cebea587ac806a 4dc2197e807bae9817f09905b50ab288be2dbbcf 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'fold-id': '6fb65cdc', 'fold-idx': '3', 'fold-size': '3', 'operation': 'rebase', 'user': 'test'} | ||||
|
r17613 | |||
$ cd .. | ||||
|
r17615 | Rebase set has hidden descendants | ||
--------------------------------- | ||||
|
r35046 | We rebase a changeset which has hidden descendants. Hidden changesets must not | ||
be rebased. | ||||
|
r17615 | |||
$ hg clone base hidden | ||||
updating to branch default | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd hidden | ||||
|
r35048 | $ hg log -G | ||
@ 7:02de42196ebe H | ||||
| | ||||
| o 6:eea13746799a G | ||||
|/| | ||||
o | 5:24b6387c8c8c F | ||||
| | | ||||
| o 4:9520eea781bc E | ||||
|/ | ||||
| o 3:32af7686d403 D | ||||
| | | ||||
| o 2:5fddd98957c8 C | ||||
| | | ||||
| o 1:42ccdea3bb16 B | ||||
|/ | ||||
o 0:cd010b8cd998 A | ||||
|
r17615 | $ hg rebase -s 5fddd98957c8 -d eea13746799a | ||
|
r23517 | rebasing 2:5fddd98957c8 "C" | ||
rebasing 3:32af7686d403 "D" | ||||
|
r35048 | $ hg log -G | ||
o 9:cf44d2f5a9f4 D | ||||
| | ||||
o 8:e273c5e7d2d2 C | ||||
| | ||||
| @ 7:02de42196ebe H | ||||
| | | ||||
o | 6:eea13746799a G | ||||
|\| | ||||
| o 5:24b6387c8c8c F | ||||
| | | ||||
o | 4:9520eea781bc E | ||||
|/ | ||||
| o 1:42ccdea3bb16 B | ||||
|/ | ||||
o 0:cd010b8cd998 A | ||||
|
r17615 | $ hg rebase -s 42ccdea3bb16 -d 02de42196ebe | ||
|
r23517 | rebasing 1:42ccdea3bb16 "B" | ||
|
r17615 | $ hg log -G | ||
|
r19925 | o 10:7c6027df6a99 B | ||
|
r17615 | | | ||
| o 9:cf44d2f5a9f4 D | ||||
| | | ||||
| o 8:e273c5e7d2d2 C | ||||
| | | ||||
|
r19925 | @ | 7:02de42196ebe H | ||
|
r17615 | | | | ||
| o 6:eea13746799a G | ||||
|/| | ||||
o | 5:24b6387c8c8c F | ||||
| | | ||||
| o 4:9520eea781bc E | ||||
|/ | ||||
o 0:cd010b8cd998 A | ||||
$ hg log --hidden -G | ||||
|
r19925 | o 10:7c6027df6a99 B | ||
|
r17615 | | | ||
| o 9:cf44d2f5a9f4 D | ||||
| | | ||||
| o 8:e273c5e7d2d2 C | ||||
| | | ||||
|
r19925 | @ | 7:02de42196ebe H | ||
|
r17615 | | | | ||
| o 6:eea13746799a G | ||||
|/| | ||||
o | 5:24b6387c8c8c F | ||||
| | | ||||
| o 4:9520eea781bc E | ||||
|/ | ||||
|
r35047 | | x 3:32af7686d403 D (rewritten using rebase as 9:cf44d2f5a9f4) | ||
|
r17615 | | | | ||
|
r35047 | | x 2:5fddd98957c8 C (rewritten using rebase as 8:e273c5e7d2d2) | ||
|
r17615 | | | | ||
|
r35047 | | x 1:42ccdea3bb16 B (rewritten using rebase as 10:7c6027df6a99) | ||
|
r17615 | |/ | ||
o 0:cd010b8cd998 A | ||||
$ hg debugobsolete | ||||
|
r34962 | 5fddd98957c8a54a4d436dfe1da9d87f21a1b97b e273c5e7d2d29df783dce9f9eaa3ac4adc69c15d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} | ||
32af7686d403cf45b5d95f2d70cebea587ac806a cf44d2f5a9f4297a62be94cbdd3dff7c7dc54258 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} | ||||
42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 7c6027df6a99d93f461868e5433f63bde20b6dfb 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} | ||||
|
r17615 | |||
|
r18398 | Test that rewriting leaving instability behind is allowed | ||
--------------------------------------------------------------------- | ||||
|
r18164 | |||
$ hg log -r 'children(8)' | ||||
9:cf44d2f5a9f4 D (no-eol) | ||||
$ hg rebase -r 8 | ||||
|
r23517 | rebasing 8:e273c5e7d2d2 "C" | ||
|
r35727 | 1 new orphan changesets | ||
|
r18164 | $ hg log -G | ||
|
r19925 | o 11:0d8f238b634c C | ||
|
r18164 | | | ||
o 10:7c6027df6a99 B | ||||
| | ||||
r35524 | | * 9:cf44d2f5a9f4 D | |||
|
r18164 | | | | ||
|
r35047 | | x 8:e273c5e7d2d2 C (rewritten using rebase as 11:0d8f238b634c) | ||
|
r18164 | | | | ||
|
r19925 | @ | 7:02de42196ebe H | ||
|
r18164 | | | | ||
| o 6:eea13746799a G | ||||
|/| | ||||
o | 5:24b6387c8c8c F | ||||
| | | ||||
| o 4:9520eea781bc E | ||||
|/ | ||||
o 0:cd010b8cd998 A | ||||
|
r37805 | $ cd .. | ||
$ cp -R hidden stabilize | ||||
$ cd stabilize | ||||
$ hg rebase --auto-orphans '0::' -d 10 | ||||
|
r44382 | abort: cannot specify both --auto-orphans and --dest | ||
|
r37805 | [255] | ||
$ hg rebase --auto-orphans '0::' | ||||
rebasing 9:cf44d2f5a9f4 "D" | ||||
$ hg log -G | ||||
o 12:7e3935feaa68 D | ||||
| | ||||
o 11:0d8f238b634c C | ||||
| | ||||
o 10:7c6027df6a99 B | ||||
| | ||||
@ 7:02de42196ebe H | ||||
| | ||||
| o 6:eea13746799a G | ||||
|/| | ||||
o | 5:24b6387c8c8c F | ||||
| | | ||||
| o 4:9520eea781bc E | ||||
|/ | ||||
o 0:cd010b8cd998 A | ||||
|
r18164 | |||
|
r37805 | $ cd ../hidden | ||
$ rm -r ../stabilize | ||||
|
r18164 | |||
|
r18424 | Test multiple root handling | ||
------------------------------------ | ||||
$ hg rebase --dest 4 --rev '7+11+9' | ||||
|
r30007 | rebasing 9:cf44d2f5a9f4 "D" | ||
|
r23517 | rebasing 7:02de42196ebe "H" | ||
rebasing 11:0d8f238b634c "C" (tip) | ||||
|
r18424 | $ hg log -G | ||
|
r19925 | o 14:1e8370e38cca C | ||
|
r18424 | | | ||
|
r30007 | @ 13:bfe264faf697 H | ||
| | ||||
| o 12:102b4c1d889b D | ||||
|
r18424 | |/ | ||
r35524 | | * 10:7c6027df6a99 B | |||
|
r18424 | | | | ||
|
r35047 | | x 7:02de42196ebe H (rewritten using rebase as 13:bfe264faf697) | ||
|
r18424 | | | | ||
+---o 6:eea13746799a G | ||||
| |/ | ||||
| o 5:24b6387c8c8c F | ||||
| | | ||||
o | 4:9520eea781bc E | ||||
|/ | ||||
o 0:cd010b8cd998 A | ||||
|
r18444 | $ cd .. | ||
|
r18472 | |||
|
r33641 | Detach both parents | ||
$ hg init double-detach | ||||
$ cd double-detach | ||||
$ hg debugdrawdag <<EOF | ||||
> F | ||||
> /| | ||||
> C E | ||||
> | | | ||||
> B D G | ||||
> \|/ | ||||
> A | ||||
> EOF | ||||
|
r33783 | $ hg rebase -d G -r 'B + D + F' | ||
rebasing 1:112478962961 "B" (B) | ||||
rebasing 2:b18e25de2cf5 "D" (D) | ||||
rebasing 6:f15c3adaf214 "F" (F tip) | ||||
|
r33786 | abort: cannot rebase 6:f15c3adaf214 without moving at least one of its parents | ||
|
r33783 | [255] | ||
|
r33641 | |||
$ cd .. | ||||
|
r18472 | test on rebase dropping a merge | ||
(setup) | ||||
$ hg init dropmerge | ||||
$ cd dropmerge | ||||
$ hg unbundle "$TESTDIR/bundles/rebase.hg" | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 8 changesets with 7 changes to 7 files (+2 heads) | ||||
|
r39516 | new changesets cd010b8cd998:02de42196ebe (8 drafts) | ||
|
r18472 | (run 'hg heads' to see heads, 'hg merge' to merge) | ||
$ hg up 3 | ||||
4 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg merge 7 | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg ci -m 'M' | ||||
$ echo I > I | ||||
$ hg add I | ||||
$ hg ci -m I | ||||
$ hg log -G | ||||
@ 9:4bde274eefcf I | ||||
| | ||||
o 8:53a6a128b2b7 M | ||||
|\ | ||||
| o 7:02de42196ebe H | ||||
| | | ||||
| | o 6:eea13746799a G | ||||
| |/| | ||||
| o | 5:24b6387c8c8c F | ||||
| | | | ||||
| | o 4:9520eea781bc E | ||||
| |/ | ||||
o | 3:32af7686d403 D | ||||
| | | ||||
o | 2:5fddd98957c8 C | ||||
| | | ||||
o | 1:42ccdea3bb16 B | ||||
|/ | ||||
o 0:cd010b8cd998 A | ||||
(actual test) | ||||
$ hg rebase --dest 6 --rev '((desc(H) + desc(D))::) - desc(M)' | ||||
|
r23517 | rebasing 3:32af7686d403 "D" | ||
rebasing 7:02de42196ebe "H" | ||||
rebasing 9:4bde274eefcf "I" (tip) | ||||
|
r35727 | 1 new orphan changesets | ||
|
r18472 | $ hg log -G | ||
@ 12:acd174b7ab39 I | ||||
| | ||||
o 11:6c11a6218c97 H | ||||
| | ||||
| o 10:b5313c85b22e D | ||||
|/ | ||||
r35524 | | * 8:53a6a128b2b7 M | |||
|
r18472 | | |\ | ||
|
r35047 | | | x 7:02de42196ebe H (rewritten using rebase as 11:6c11a6218c97) | ||
|
r18472 | | | | | ||
o---+ 6:eea13746799a G | ||||
| | | | ||||
| | o 5:24b6387c8c8c F | ||||
| | | | ||||
o---+ 4:9520eea781bc E | ||||
/ / | ||||
|
r35047 | x | 3:32af7686d403 D (rewritten using rebase as 10:b5313c85b22e) | ||
|
r18472 | | | | ||
o | 2:5fddd98957c8 C | ||||
| | | ||||
o | 1:42ccdea3bb16 B | ||||
|/ | ||||
o 0:cd010b8cd998 A | ||||
|
r23970 | |||
Test hidden changesets in the rebase set (issue4504) | ||||
$ hg up --hidden 9 | ||||
|
r37939 | 3 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||
updated to hidden changeset 4bde274eefcf | ||||
|
r35729 | (hidden revision '4bde274eefcf' was rewritten as: acd174b7ab39) | ||
|
r23970 | $ echo J > J | ||
$ hg add J | ||||
$ hg commit -m J | ||||
|
r35727 | 1 new orphan changesets | ||
|
r23970 | $ hg debugobsolete `hg log --rev . -T '{node}'` | ||
r43163 | 1 new obsolescence markers | |||
|
r33542 | obsoleted 1 changesets | ||
|
r23970 | |||
|
r28429 | $ hg rebase --rev .~1::. --dest 'max(desc(D))' --traceback --config experimental.rebaseskipobsolete=off | ||
|
r23970 | rebasing 9:4bde274eefcf "I" | ||
rebasing 13:06edfc82198f "J" (tip) | ||||
|
r35727 | 2 new content-divergent changesets | ||
|
r23970 | $ hg log -G | ||
@ 15:5ae8a643467b J | ||||
| | ||||
r35524 | * 14:9ad579b4a5de I | |||
|
r23970 | | | ||
r35524 | | * 12:acd174b7ab39 I | |||
|
r23970 | | | | ||
| o 11:6c11a6218c97 H | ||||
| | | ||||
o | 10:b5313c85b22e D | ||||
|/ | ||||
r35524 | | * 8:53a6a128b2b7 M | |||
|
r23970 | | |\ | ||
|
r35047 | | | x 7:02de42196ebe H (rewritten using rebase as 11:6c11a6218c97) | ||
|
r23970 | | | | | ||
o---+ 6:eea13746799a G | ||||
| | | | ||||
| | o 5:24b6387c8c8c F | ||||
| | | | ||||
o---+ 4:9520eea781bc E | ||||
/ / | ||||
|
r35047 | x | 3:32af7686d403 D (rewritten using rebase as 10:b5313c85b22e) | ||
|
r23970 | | | | ||
o | 2:5fddd98957c8 C | ||||
| | | ||||
o | 1:42ccdea3bb16 B | ||||
|/ | ||||
o 0:cd010b8cd998 A | ||||
|
r26349 | $ hg up 14 -C | ||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ echo "K" > K | ||||
$ hg add K | ||||
$ hg commit --amend -m "K" | ||||
|
r35727 | 1 new orphan changesets | ||
|
r26349 | $ echo "L" > L | ||
$ hg add L | ||||
$ hg commit -m "L" | ||||
$ hg up '.^' | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ echo "M" > M | ||||
$ hg add M | ||||
$ hg commit --amend -m "M" | ||||
|
r35727 | 1 new orphan changesets | ||
|
r26349 | $ hg log -G | ||
|
r34087 | @ 18:bfaedf8eb73b M | ||
|
r26349 | | | ||
r35524 | | * 17:97219452e4bd L | |||
|
r26349 | | | | ||
|
r35047 | | x 16:fc37a630c901 K (rewritten using amend as 18:bfaedf8eb73b) | ||
|
r26349 | |/ | ||
r35524 | | * 15:5ae8a643467b J | |||
|
r26349 | | | | ||
|
r35047 | | x 14:9ad579b4a5de I (rewritten using amend as 16:fc37a630c901) | ||
|
r26349 | |/ | ||
r35524 | | * 12:acd174b7ab39 I | |||
|
r26349 | | | | ||
| o 11:6c11a6218c97 H | ||||
| | | ||||
o | 10:b5313c85b22e D | ||||
|/ | ||||
r35524 | | * 8:53a6a128b2b7 M | |||
|
r26349 | | |\ | ||
|
r35047 | | | x 7:02de42196ebe H (rewritten using rebase as 11:6c11a6218c97) | ||
|
r26349 | | | | | ||
o---+ 6:eea13746799a G | ||||
| | | | ||||
| | o 5:24b6387c8c8c F | ||||
| | | | ||||
o---+ 4:9520eea781bc E | ||||
/ / | ||||
|
r35047 | x | 3:32af7686d403 D (rewritten using rebase as 10:b5313c85b22e) | ||
|
r26349 | | | | ||
o | 2:5fddd98957c8 C | ||||
| | | ||||
o | 1:42ccdea3bb16 B | ||||
|/ | ||||
o 0:cd010b8cd998 A | ||||
|
r34087 | $ hg rebase -s 14 -d 17 --config experimental.rebaseskipobsolete=True | ||
note: not rebasing 14:9ad579b4a5de "I", already in destination as 16:fc37a630c901 "K" | ||||
|
r26349 | rebasing 15:5ae8a643467b "J" | ||
|
r35727 | 1 new orphan changesets | ||
|
r26349 | |||
|
r26675 | $ cd .. | ||
Skip obsolete changeset even with multiple hops | ||||
----------------------------------------------- | ||||
setup | ||||
$ hg init obsskip | ||||
$ cd obsskip | ||||
$ cat << EOF >> .hg/hgrc | ||||
> [experimental] | ||||
> rebaseskipobsolete = True | ||||
> [extensions] | ||||
> strip = | ||||
> EOF | ||||
$ echo A > A | ||||
$ hg add A | ||||
$ hg commit -m A | ||||
$ echo B > B | ||||
$ hg add B | ||||
$ hg commit -m B0 | ||||
$ hg commit --amend -m B1 | ||||
$ hg commit --amend -m B2 | ||||
$ hg up --hidden 'desc(B0)' | ||||
|
r37939 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||
updated to hidden changeset a8b11f55fb19 | ||||
|
r35729 | (hidden revision 'a8b11f55fb19' was rewritten as: 261e70097290) | ||
|
r26675 | $ echo C > C | ||
$ hg add C | ||||
$ hg commit -m C | ||||
|
r35727 | 1 new orphan changesets | ||
|
r35048 | $ hg log -G | ||
@ 4:212cb178bcbb C | ||||
| | ||||
| o 3:261e70097290 B2 | ||||
| | | ||||
x | 1:a8b11f55fb19 B0 (rewritten using amend as 3:261e70097290) | ||||
|/ | ||||
o 0:4a2df7238c3b A | ||||
|
r26675 | |||
Rebase finds its way in a chain of marker | ||||
$ hg rebase -d 'desc(B2)' | ||||
note: not rebasing 1:a8b11f55fb19 "B0", already in destination as 3:261e70097290 "B2" | ||||
rebasing 4:212cb178bcbb "C" (tip) | ||||
Even when the chain include missing node | ||||
$ hg up --hidden 'desc(B0)' | ||||
|
r37939 | 0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||
updated to hidden changeset a8b11f55fb19 | ||||
|
r35729 | (hidden revision 'a8b11f55fb19' was rewritten as: 261e70097290) | ||
|
r26675 | $ echo D > D | ||
$ hg add D | ||||
$ hg commit -m D | ||||
|
r35727 | 1 new orphan changesets | ||
|
r26675 | $ hg --hidden strip -r 'desc(B1)' | ||
|
r35394 | saved backup bundle to $TESTTMP/obsskip/.hg/strip-backup/86f6414ccda7-b1c452ee-backup.hg | ||
|
r35796 | 1 new orphan changesets | ||
|
r35048 | $ hg log -G | ||
@ 5:1a79b7535141 D | ||||
| | ||||
| o 4:ff2c4d47b71d C | ||||
| | | ||||
| o 2:261e70097290 B2 | ||||
| | | ||||
x | 1:a8b11f55fb19 B0 (rewritten using amend as 2:261e70097290) | ||||
|/ | ||||
o 0:4a2df7238c3b A | ||||
|
r26675 | |||
$ hg rebase -d 'desc(B2)' | ||||
note: not rebasing 1:a8b11f55fb19 "B0", already in destination as 2:261e70097290 "B2" | ||||
rebasing 5:1a79b7535141 "D" (tip) | ||||
|
r27012 | $ hg up 4 | ||
1 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ echo "O" > O | ||||
$ hg add O | ||||
$ hg commit -m O | ||||
$ echo "P" > P | ||||
$ hg add P | ||||
$ hg commit -m P | ||||
$ hg log -G | ||||
@ 8:8d47583e023f P | ||||
| | ||||
o 7:360bbaa7d3ce O | ||||
| | ||||
| o 6:9c48361117de D | ||||
| | | ||||
o | 4:ff2c4d47b71d C | ||||
|/ | ||||
o 2:261e70097290 B2 | ||||
| | ||||
o 0:4a2df7238c3b A | ||||
|
r34866 | $ hg debugobsolete `hg log -r 7 -T '{node}\n'` --config experimental.evolution=true | ||
r43163 | 1 new obsolescence markers | |||
|
r33542 | obsoleted 1 changesets | ||
|
r35727 | 1 new orphan changesets | ||
|
r27012 | $ hg rebase -d 6 -r "4::" | ||
|
r34010 | rebasing 4:ff2c4d47b71d "C" | ||
|
r33841 | note: not rebasing 7:360bbaa7d3ce "O", it has no successor | ||
|
r27012 | rebasing 8:8d47583e023f "P" (tip) | ||
|
r27577 | |||
If all the changeset to be rebased are obsolete and present in the destination, we | ||||
should display a friendly error message | ||||
$ hg log -G | ||||
@ 10:121d9e3bc4c6 P | ||||
| | ||||
o 9:4be60e099a77 C | ||||
| | ||||
o 6:9c48361117de D | ||||
| | ||||
o 2:261e70097290 B2 | ||||
| | ||||
o 0:4a2df7238c3b A | ||||
$ hg up 9 | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ echo "non-relevant change" > nonrelevant | ||||
$ hg add nonrelevant | ||||
$ hg commit -m nonrelevant | ||||
created new head | ||||
|
r34866 | $ hg debugobsolete `hg log -r 11 -T '{node}\n'` --config experimental.evolution=true | ||
r43163 | 1 new obsolescence markers | |||
|
r33542 | obsoleted 1 changesets | ||
|
r35048 | $ hg log -G | ||
@ 11:f44da1f4954c nonrelevant (pruned) | ||||
| | ||||
| o 10:121d9e3bc4c6 P | ||||
|/ | ||||
o 9:4be60e099a77 C | ||||
| | ||||
o 6:9c48361117de D | ||||
| | ||||
o 2:261e70097290 B2 | ||||
| | ||||
o 0:4a2df7238c3b A | ||||
|
r27577 | $ hg rebase -r . -d 10 | ||
|
r29372 | note: not rebasing 11:f44da1f4954c "nonrelevant" (tip), it has no successor | ||
|
r27746 | |||
If a rebase is going to create divergence, it should abort | ||||
$ hg log -G | ||||
|
r34010 | @ 10:121d9e3bc4c6 P | ||
|
r27746 | | | ||
o 9:4be60e099a77 C | ||||
| | ||||
o 6:9c48361117de D | ||||
| | ||||
o 2:261e70097290 B2 | ||||
| | ||||
o 0:4a2df7238c3b A | ||||
$ hg up 9 | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ echo "john" > doe | ||||
$ hg add doe | ||||
$ hg commit -m "john doe" | ||||
created new head | ||||
$ hg up 10 | ||||
1 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ echo "foo" > bar | ||||
$ hg add bar | ||||
$ hg commit --amend -m "10'" | ||||
$ hg up 10 --hidden | ||||
|
r37939 | 0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||
updated to hidden changeset 121d9e3bc4c6 | ||||
|
r35729 | (hidden revision '121d9e3bc4c6' was rewritten as: 77d874d096a2) | ||
|
r27746 | $ echo "bar" > foo | ||
$ hg add foo | ||||
$ hg commit -m "bar foo" | ||||
|
r35727 | 1 new orphan changesets | ||
|
r27746 | $ hg log -G | ||
|
r34087 | @ 14:73568ab6879d bar foo | ||
|
r27746 | | | ||
|
r34087 | | o 13:77d874d096a2 10' | ||
|
r27746 | | | | ||
| | o 12:3eb461388009 john doe | ||||
| |/ | ||||
|
r35047 | x | 10:121d9e3bc4c6 P (rewritten using amend as 13:77d874d096a2) | ||
|
r27746 | |/ | ||
o 9:4be60e099a77 C | ||||
| | ||||
o 6:9c48361117de D | ||||
| | ||||
o 2:261e70097290 B2 | ||||
| | ||||
o 0:4a2df7238c3b A | ||||
$ hg summary | ||||
|
r34087 | parent: 14:73568ab6879d tip (orphan) | ||
|
r27746 | bar foo | ||
branch: default | ||||
commit: (clean) | ||||
update: 2 new changesets, 3 branch heads (merge) | ||||
phases: 8 draft | ||||
|
r33632 | orphan: 1 changesets | ||
|
r27746 | $ hg rebase -s 10 -d 12 | ||
|
r28188 | abort: this rebase will cause divergences from: 121d9e3bc4c6 | ||
|
r34873 | (to force the rebase please set experimental.evolution.allowdivergence=True) | ||
|
r27746 | [255] | ||
$ hg log -G | ||||
|
r34087 | @ 14:73568ab6879d bar foo | ||
|
r27746 | | | ||
|
r34087 | | o 13:77d874d096a2 10' | ||
|
r27746 | | | | ||
| | o 12:3eb461388009 john doe | ||||
| |/ | ||||
|
r35047 | x | 10:121d9e3bc4c6 P (rewritten using amend as 13:77d874d096a2) | ||
|
r27746 | |/ | ||
o 9:4be60e099a77 C | ||||
| | ||||
o 6:9c48361117de D | ||||
| | ||||
o 2:261e70097290 B2 | ||||
| | ||||
o 0:4a2df7238c3b A | ||||
|
r34873 | With experimental.evolution.allowdivergence=True, rebase can create divergence | ||
|
r27746 | |||
|
r34873 | $ hg rebase -s 10 -d 12 --config experimental.evolution.allowdivergence=True | ||
|
r27746 | rebasing 10:121d9e3bc4c6 "P" | ||
|
r34087 | rebasing 14:73568ab6879d "bar foo" (tip) | ||
|
r35727 | 2 new content-divergent changesets | ||
|
r27746 | $ hg summary | ||
|
r34087 | parent: 16:61bd55f69bc4 tip | ||
|
r27746 | bar foo | ||
branch: default | ||||
commit: (clean) | ||||
update: 1 new changesets, 2 branch heads (merge) | ||||
phases: 8 draft | ||||
|
r33651 | content-divergent: 2 changesets | ||
|
r27746 | |||
|
r28686 | rebase --continue + skipped rev because their successors are in destination | ||
we make a change in trunk and work on conflicting changes to make rebase abort. | ||||
|
r34087 | $ hg log -G -r 16:: | ||
@ 16:61bd55f69bc4 bar foo | ||||
|
r28686 | | | ||
~ | ||||
Create the two changes in trunk | ||||
$ printf "a" > willconflict | ||||
$ hg add willconflict | ||||
$ hg commit -m "willconflict first version" | ||||
$ printf "dummy" > C | ||||
$ hg commit -m "dummy change successor" | ||||
Create the changes that we will rebase | ||||
|
r34087 | $ hg update -C 16 -q | ||
|
r28686 | $ printf "b" > willconflict | ||
$ hg add willconflict | ||||
$ hg commit -m "willconflict second version" | ||||
created new head | ||||
$ printf "dummy" > K | ||||
$ hg add K | ||||
$ hg commit -m "dummy change" | ||||
$ printf "dummy" > L | ||||
$ hg add L | ||||
$ hg commit -m "dummy change" | ||||
|
r34866 | $ hg debugobsolete `hg log -r ".^" -T '{node}'` `hg log -r 18 -T '{node}'` --config experimental.evolution=true | ||
r43163 | 1 new obsolescence markers | |||
|
r33542 | obsoleted 1 changesets | ||
|
r35727 | 1 new orphan changesets | ||
|
r28686 | |||
|
r34087 | $ hg log -G -r 16:: | ||
@ 21:7bdc8a87673d dummy change | ||||
|
r28686 | | | ||
|
r35047 | x 20:8b31da3c4919 dummy change (rewritten as 18:601db7a18f51) | ||
|
r28686 | | | ||
|
r34087 | o 19:b82fb57ea638 willconflict second version | ||
|
r28686 | | | ||
|
r34087 | | o 18:601db7a18f51 dummy change successor | ||
|
r28686 | | | | ||
|
r34087 | | o 17:357ddf1602d5 willconflict first version | ||
|
r28686 | |/ | ||
|
r34087 | o 16:61bd55f69bc4 bar foo | ||
|
r28686 | | | ||
~ | ||||
|
r34087 | $ hg rebase -r ".^^ + .^ + ." -d 18 | ||
rebasing 19:b82fb57ea638 "willconflict second version" | ||||
|
r28686 | merging willconflict | ||
warning: conflicts while merging willconflict! (edit, then use 'hg resolve --mark') | ||||
|
r45710 | unresolved conflicts (see 'hg resolve', then 'hg rebase --continue') | ||
|
r28686 | [1] | ||
$ hg resolve --mark willconflict | ||||
(no more unresolved files) | ||||
continue: hg rebase --continue | ||||
$ hg rebase --continue | ||||
|
r34087 | rebasing 19:b82fb57ea638 "willconflict second version" | ||
note: not rebasing 20:8b31da3c4919 "dummy change", already in destination as 18:601db7a18f51 "dummy change successor" | ||||
rebasing 21:7bdc8a87673d "dummy change" (tip) | ||||
|
r29063 | $ cd .. | ||
|
r35049 | Divergence cases due to obsolete changesets | ||
------------------------------------------- | ||||
We should ignore branches with unstable changesets when they are based on an | ||||
obsolete changeset which successor is in rebase set. | ||||
$ hg init divergence | ||||
$ cd divergence | ||||
$ cat >> .hg/hgrc << EOF | ||||
> [extensions] | ||||
> strip = | ||||
> [alias] | ||||
> strip = strip --no-backup --quiet | ||||
> [templates] | ||||
> instabilities = '{rev}:{node|short} {desc|firstline}{if(instabilities," ({instabilities})")}\n' | ||||
> EOF | ||||
$ hg debugdrawdag <<EOF | ||||
> e f | ||||
> | | | ||||
> d' d # replace: d -> d' | ||||
> \ / | ||||
> c | ||||
> | | ||||
> x b | ||||
> \| | ||||
> a | ||||
> EOF | ||||
|
r35727 | 1 new orphan changesets | ||
|
r35049 | $ hg log -G -r 'a':: | ||
r35524 | * 7:1143e9adc121 f | |||
|
r35049 | | | ||
| o 6:d60ebfa0f1cb e | ||||
| | | ||||
| o 5:027ad6c5830d d' | ||||
| | | ||||
x | 4:76be324c128b d (rewritten using replace as 5:027ad6c5830d) | ||||
|/ | ||||
o 3:a82ac2b38757 c | ||||
| | ||||
| o 2:630d7c95eff7 x | ||||
| | | ||||
o | 1:488e1b7e7341 b | ||||
|/ | ||||
o 0:b173517d0057 a | ||||
Changeset d and its descendants are excluded to avoid divergence of d, which | ||||
would occur because the successor of d (d') is also in rebaseset. As a | ||||
consequence f (descendant of d) is left behind. | ||||
$ hg rebase -b 'e' -d 'x' | ||||
rebasing 1:488e1b7e7341 "b" (b) | ||||
rebasing 3:a82ac2b38757 "c" (c) | ||||
rebasing 5:027ad6c5830d "d'" (d') | ||||
rebasing 6:d60ebfa0f1cb "e" (e) | ||||
note: not rebasing 4:76be324c128b "d" (d) and its descendants as this would cause divergence | ||||
$ hg log -G -r 'a':: | ||||
o 11:eb6d63fc4ed5 e | ||||
| | ||||
o 10:44d8c724a70c d' | ||||
| | ||||
o 9:d008e6b4d3fd c | ||||
| | ||||
o 8:67e8f4a16c49 b | ||||
| | ||||
r35524 | | * 7:1143e9adc121 f | |||
|
r35049 | | | | ||
| | x 6:d60ebfa0f1cb e (rewritten using rebase as 11:eb6d63fc4ed5) | ||||
| | | | ||||
| | x 5:027ad6c5830d d' (rewritten using rebase as 10:44d8c724a70c) | ||||
| | | | ||||
| x | 4:76be324c128b d (rewritten using replace as 5:027ad6c5830d) | ||||
| |/ | ||||
| x 3:a82ac2b38757 c (rewritten using rebase as 9:d008e6b4d3fd) | ||||
| | | ||||
o | 2:630d7c95eff7 x | ||||
| | | ||||
| x 1:488e1b7e7341 b (rewritten using rebase as 8:67e8f4a16c49) | ||||
|/ | ||||
o 0:b173517d0057 a | ||||
$ hg strip -r 8: | ||||
|
r39362 | $ hg log -G -r 'a':: | ||
* 7:1143e9adc121 f | ||||
| | ||||
| o 6:d60ebfa0f1cb e | ||||
| | | ||||
| o 5:027ad6c5830d d' | ||||
| | | ||||
x | 4:76be324c128b d (rewritten using replace as 5:027ad6c5830d) | ||||
|/ | ||||
o 3:a82ac2b38757 c | ||||
| | ||||
| o 2:630d7c95eff7 x | ||||
| | | ||||
o | 1:488e1b7e7341 b | ||||
|/ | ||||
o 0:b173517d0057 a | ||||
|
r35049 | |||
If the rebase set has an obsolete (d) with a successor (d') outside the rebase | ||||
set and none in destination, we still get the divergence warning. | ||||
By allowing divergence, we can perform the rebase. | ||||
$ hg rebase -r 'c'::'f' -d 'x' | ||||
abort: this rebase will cause divergences from: 76be324c128b | ||||
(to force the rebase please set experimental.evolution.allowdivergence=True) | ||||
[255] | ||||
$ hg rebase --config experimental.evolution.allowdivergence=true -r 'c'::'f' -d 'x' | ||||
rebasing 3:a82ac2b38757 "c" (c) | ||||
rebasing 4:76be324c128b "d" (d) | ||||
rebasing 7:1143e9adc121 "f" (f tip) | ||||
|
r35727 | 1 new orphan changesets | ||
2 new content-divergent changesets | ||||
|
r35049 | $ hg log -G -r 'a':: -T instabilities | ||
o 10:e1744ea07510 f | ||||
| | ||||
r35524 | * 9:e2b36ea9a0a0 d (content-divergent) | |||
|
r35049 | | | ||
o 8:6a0376de376e c | ||||
| | ||||
| x 7:1143e9adc121 f | ||||
| | | ||||
r35524 | | | * 6:d60ebfa0f1cb e (orphan) | |||
|
r35049 | | | | | ||
r35524 | | | * 5:027ad6c5830d d' (orphan content-divergent) | |||
|
r35049 | | | | | ||
| x | 4:76be324c128b d | ||||
| |/ | ||||
| x 3:a82ac2b38757 c | ||||
| | | ||||
o | 2:630d7c95eff7 x | ||||
| | | ||||
| o 1:488e1b7e7341 b | ||||
|/ | ||||
o 0:b173517d0057 a | ||||
$ hg strip -r 8: | ||||
(Not skipping obsoletes means that divergence is allowed.) | ||||
$ hg rebase --config experimental.rebaseskipobsolete=false -r 'c'::'f' -d 'x' | ||||
rebasing 3:a82ac2b38757 "c" (c) | ||||
rebasing 4:76be324c128b "d" (d) | ||||
rebasing 7:1143e9adc121 "f" (f tip) | ||||
|
r35727 | 1 new orphan changesets | ||
2 new content-divergent changesets | ||||
|
r35049 | |||
$ hg strip -r 0: | ||||
Similar test on a more complex graph | ||||
$ hg debugdrawdag <<EOF | ||||
> g | ||||
> | | ||||
> f e | ||||
> | | | ||||
> e' d # replace: e -> e' | ||||
> \ / | ||||
> c | ||||
> | | ||||
> x b | ||||
> \| | ||||
> a | ||||
> EOF | ||||
|
r35727 | 1 new orphan changesets | ||
|
r35049 | $ hg log -G -r 'a': | ||
r35524 | * 8:2876ce66c6eb g | |||
|
r35049 | | | ||
| o 7:3ffec603ab53 f | ||||
| | | ||||
x | 6:e36fae928aec e (rewritten using replace as 5:63324dc512ea) | ||||
| | | ||||
| o 5:63324dc512ea e' | ||||
| | | ||||
o | 4:76be324c128b d | ||||
|/ | ||||
o 3:a82ac2b38757 c | ||||
| | ||||
| o 2:630d7c95eff7 x | ||||
| | | ||||
o | 1:488e1b7e7341 b | ||||
|/ | ||||
o 0:b173517d0057 a | ||||
$ hg rebase -b 'f' -d 'x' | ||||
rebasing 1:488e1b7e7341 "b" (b) | ||||
rebasing 3:a82ac2b38757 "c" (c) | ||||
rebasing 5:63324dc512ea "e'" (e') | ||||
rebasing 7:3ffec603ab53 "f" (f) | ||||
rebasing 4:76be324c128b "d" (d) | ||||
note: not rebasing 6:e36fae928aec "e" (e) and its descendants as this would cause divergence | ||||
$ hg log -G -r 'a': | ||||
o 13:a1707a5b7c2c d | ||||
| | ||||
| o 12:ef6251596616 f | ||||
| | | ||||
| o 11:b6f172e64af9 e' | ||||
|/ | ||||
o 10:d008e6b4d3fd c | ||||
| | ||||
o 9:67e8f4a16c49 b | ||||
| | ||||
r35524 | | * 8:2876ce66c6eb g | |||
|
r35049 | | | | ||
| | x 7:3ffec603ab53 f (rewritten using rebase as 12:ef6251596616) | ||||
| | | | ||||
| x | 6:e36fae928aec e (rewritten using replace as 5:63324dc512ea) | ||||
| | | | ||||
| | x 5:63324dc512ea e' (rewritten using rebase as 11:b6f172e64af9) | ||||
| | | | ||||
| x | 4:76be324c128b d (rewritten using rebase as 13:a1707a5b7c2c) | ||||
| |/ | ||||
| x 3:a82ac2b38757 c (rewritten using rebase as 10:d008e6b4d3fd) | ||||
| | | ||||
o | 2:630d7c95eff7 x | ||||
| | | ||||
| x 1:488e1b7e7341 b (rewritten using rebase as 9:67e8f4a16c49) | ||||
|/ | ||||
o 0:b173517d0057 a | ||||
|
r36011 | issue5782 | ||
$ hg strip -r 0: | ||||
$ hg debugdrawdag <<EOF | ||||
> d | ||||
> | | ||||
> c1 c # replace: c -> c1 | ||||
> \ / | ||||
> b | ||||
> | | ||||
> a | ||||
> EOF | ||||
1 new orphan changesets | ||||
$ hg debugobsolete `hg log -T "{node}" --hidden -r 'desc("c1")'` | ||||
r43163 | 1 new obsolescence markers | |||
|
r36011 | obsoleted 1 changesets | ||
$ hg log -G -r 'a': --hidden | ||||
* 4:76be324c128b d | ||||
| | ||||
| x 3:ef8a456de8fa c1 (pruned) | ||||
| | | ||||
x | 2:a82ac2b38757 c (rewritten using replace as 3:ef8a456de8fa) | ||||
|/ | ||||
o 1:488e1b7e7341 b | ||||
| | ||||
o 0:b173517d0057 a | ||||
$ hg rebase -d 0 -r 2 | ||||
rebasing 2:a82ac2b38757 "c" (c) | ||||
$ hg log -G -r 'a': --hidden | ||||
o 5:69ad416a4a26 c | ||||
| | ||||
| * 4:76be324c128b d | ||||
| | | ||||
| | x 3:ef8a456de8fa c1 (pruned) | ||||
| | | | ||||
| x | 2:a82ac2b38757 c (rewritten using replace as 3:ef8a456de8fa rewritten using rebase as 5:69ad416a4a26) | ||||
| |/ | ||||
| o 1:488e1b7e7341 b | ||||
|/ | ||||
o 0:b173517d0057 a | ||||
|
r35049 | $ cd .. | ||
|
r33640 | Rebase merge where successor of one parent is equal to destination (issue5198) | ||
$ hg init p1-succ-is-dest | ||||
$ cd p1-succ-is-dest | ||||
|
r29063 | |||
|
r33640 | $ hg debugdrawdag <<EOF | ||
> F | ||||
> /| | ||||
> E D B # replace: D -> B | ||||
> \|/ | ||||
> A | ||||
> EOF | ||||
|
r35727 | 1 new orphan changesets | ||
|
r33640 | |||
$ hg rebase -d B -s D | ||||
|
r34011 | note: not rebasing 2:b18e25de2cf5 "D" (D), already in destination as 1:112478962961 "B" (B) | ||
|
r33640 | rebasing 4:66f1a38021c9 "F" (F tip) | ||
|
r29063 | $ hg log -G | ||
|
r33640 | o 5:50e9d60b99c6 F | ||
|\ | ||||
|
r35047 | | | x 4:66f1a38021c9 F (rewritten using rebase as 5:50e9d60b99c6) | ||
|
r29063 | | |/| | ||
|
r33640 | | o | 3:7fb047a69f22 E | ||
| | | | ||||
|
r35047 | | | x 2:b18e25de2cf5 D (rewritten using replace as 1:112478962961) | ||
|
r33640 | | |/ | ||
o | 1:112478962961 B | ||||
|
r29063 | |/ | ||
|
r33640 | o 0:426bada5c675 A | ||
$ cd .. | ||||
Rebase merge where successor of other parent is equal to destination | ||||
$ hg init p2-succ-is-dest | ||||
$ cd p2-succ-is-dest | ||||
$ hg debugdrawdag <<EOF | ||||
> F | ||||
> /| | ||||
> E D B # replace: E -> B | ||||
> \|/ | ||||
> A | ||||
> EOF | ||||
|
r35727 | 1 new orphan changesets | ||
|
r33640 | |||
|
r33783 | $ hg rebase -d B -s E | ||
|
r34011 | note: not rebasing 3:7fb047a69f22 "E" (E), already in destination as 1:112478962961 "B" (B) | ||
|
r33783 | rebasing 4:66f1a38021c9 "F" (F tip) | ||
|
r33640 | $ hg log -G | ||
|
r33783 | o 5:aae1787dacee F | ||
|
r33640 | |\ | ||
|
r35047 | | | x 4:66f1a38021c9 F (rewritten using rebase as 5:aae1787dacee) | ||
|
r33783 | | |/| | ||
|
r35047 | | | x 3:7fb047a69f22 E (rewritten using replace as 1:112478962961) | ||
|
r33783 | | | | | ||
| o | 2:b18e25de2cf5 D | ||||
| |/ | ||||
o / 1:112478962961 B | ||||
|
r33640 | |/ | ||
o 0:426bada5c675 A | ||||
|
r29063 | |||
|
r33640 | $ cd .. | ||
Rebase merge where successor of one parent is ancestor of destination | ||||
$ hg init p1-succ-in-dest | ||||
$ cd p1-succ-in-dest | ||||
$ hg debugdrawdag <<EOF | ||||
> F C | ||||
> /| | | ||||
> E D B # replace: D -> B | ||||
> \|/ | ||||
> A | ||||
> EOF | ||||
|
r35727 | 1 new orphan changesets | ||
|
r33640 | |||
$ hg rebase -d C -s D | ||||
|
r34011 | note: not rebasing 2:b18e25de2cf5 "D" (D), already in destination as 1:112478962961 "B" (B) | ||
|
r33640 | rebasing 5:66f1a38021c9 "F" (F tip) | ||
|
r33783 | |||
|
r29063 | $ hg log -G | ||
|
r33783 | o 6:0913febf6439 F | ||
|
r33640 | |\ | ||
|
r35047 | +---x 5:66f1a38021c9 F (rewritten using rebase as 6:0913febf6439) | ||
|
r33783 | | | | | ||
| o | 4:26805aba1e60 C | ||||
|
r33640 | | | | | ||
|
r33783 | o | | 3:7fb047a69f22 E | ||
|
r33640 | | | | | ||
|
r35047 | +---x 2:b18e25de2cf5 D (rewritten using replace as 1:112478962961) | ||
|
r33783 | | | | ||
| o 1:112478962961 B | ||||
|
r33640 | |/ | ||
o 0:426bada5c675 A | ||||
$ cd .. | ||||
Rebase merge where successor of other parent is ancestor of destination | ||||
$ hg init p2-succ-in-dest | ||||
$ cd p2-succ-in-dest | ||||
$ hg debugdrawdag <<EOF | ||||
> F C | ||||
> /| | | ||||
> E D B # replace: E -> B | ||||
> \|/ | ||||
> A | ||||
> EOF | ||||
|
r35727 | 1 new orphan changesets | ||
|
r33640 | |||
|
r33783 | $ hg rebase -d C -s E | ||
|
r34011 | note: not rebasing 3:7fb047a69f22 "E" (E), already in destination as 1:112478962961 "B" (B) | ||
|
r33783 | rebasing 5:66f1a38021c9 "F" (F tip) | ||
|
r33640 | $ hg log -G | ||
|
r33783 | o 6:c6ab0cc6d220 F | ||
|
r29063 | |\ | ||
|
r35047 | +---x 5:66f1a38021c9 F (rewritten using rebase as 6:c6ab0cc6d220) | ||
|
r33640 | | | | | ||
|
r33783 | | o | 4:26805aba1e60 C | ||
|
r33640 | | | | | ||
|
r35047 | | | x 3:7fb047a69f22 E (rewritten using replace as 1:112478962961) | ||
|
r33783 | | | | | ||
o---+ 2:b18e25de2cf5 D | ||||
/ / | ||||
o / 1:112478962961 B | ||||
|
r29063 | |/ | ||
|
r33640 | o 0:426bada5c675 A | ||
$ cd .. | ||||
Rebase merge where successor of one parent is ancestor of destination | ||||
$ hg init p1-succ-in-dest-b | ||||
$ cd p1-succ-in-dest-b | ||||
$ hg debugdrawdag <<EOF | ||||
> F C | ||||
> /| | | ||||
> E D B # replace: E -> B | ||||
> \|/ | ||||
> A | ||||
> EOF | ||||
|
r35727 | 1 new orphan changesets | ||
|
r33640 | |||
$ hg rebase -d C -b F | ||||
|
r34010 | rebasing 2:b18e25de2cf5 "D" (D) | ||
|
r34011 | note: not rebasing 3:7fb047a69f22 "E" (E), already in destination as 1:112478962961 "B" (B) | ||
|
r33640 | rebasing 5:66f1a38021c9 "F" (F tip) | ||
|
r40900 | note: not rebasing 5:66f1a38021c9 "F" (F tip), its destination already has all its changes | ||
|
r33640 | $ hg log -G | ||
o 6:8f47515dda15 D | ||||
| | ||||
|
r35047 | | x 5:66f1a38021c9 F (pruned using rebase) | ||
|
r33640 | | |\ | ||
o | | 4:26805aba1e60 C | ||||
| | | | ||||
|
r35047 | | | x 3:7fb047a69f22 E (rewritten using replace as 1:112478962961) | ||
|
r33640 | | | | | ||
|
r35047 | | x | 2:b18e25de2cf5 D (rewritten using rebase as 6:8f47515dda15) | ||
|
r33640 | | |/ | ||
o / 1:112478962961 B | ||||
|
r29063 | |/ | ||
|
r33640 | o 0:426bada5c675 A | ||
$ cd .. | ||||
Rebase merge where successor of other parent is ancestor of destination | ||||
$ hg init p2-succ-in-dest-b | ||||
$ cd p2-succ-in-dest-b | ||||
$ hg debugdrawdag <<EOF | ||||
> F C | ||||
> /| | | ||||
> E D B # replace: D -> B | ||||
> \|/ | ||||
> A | ||||
> EOF | ||||
|
r35727 | 1 new orphan changesets | ||
|
r33640 | |||
$ hg rebase -d C -b F | ||||
|
r34011 | note: not rebasing 2:b18e25de2cf5 "D" (D), already in destination as 1:112478962961 "B" (B) | ||
|
r33640 | rebasing 3:7fb047a69f22 "E" (E) | ||
rebasing 5:66f1a38021c9 "F" (F tip) | ||||
|
r40900 | note: not rebasing 5:66f1a38021c9 "F" (F tip), its destination already has all its changes | ||
|
r33783 | |||
|
r33640 | $ hg log -G | ||
|
r33783 | o 6:533690786a86 E | ||
| | ||||
|
r35047 | | x 5:66f1a38021c9 F (pruned using rebase) | ||
|
r33640 | | |\ | ||
o | | 4:26805aba1e60 C | ||||
| | | | ||||
|
r35047 | | | x 3:7fb047a69f22 E (rewritten using rebase as 6:533690786a86) | ||
|
r33640 | | | | | ||
|
r35047 | | x | 2:b18e25de2cf5 D (rewritten using replace as 1:112478962961) | ||
|
r33640 | | |/ | ||
o / 1:112478962961 B | ||||
|/ | ||||
o 0:426bada5c675 A | ||||
|
r29063 | |||
$ cd .. | ||||
|
r29372 | |||
|
r39363 | Rebase merge where extinct node has successor that is not an ancestor of | ||
destination | ||||
$ hg init extinct-with-succ-not-in-dest | ||||
$ cd extinct-with-succ-not-in-dest | ||||
$ hg debugdrawdag <<EOF | ||||
> E C # replace: C -> E | ||||
> | | | ||||
> D B | ||||
> |/ | ||||
> A | ||||
> EOF | ||||
$ hg rebase -d D -s B | ||||
|
r39364 | rebasing 1:112478962961 "B" (B) | ||
note: not rebasing 3:26805aba1e60 "C" (C) and its descendants as this would cause divergence | ||||
|
r39363 | |||
$ cd .. | ||||
|
r38241 | $ hg init p2-succ-in-dest-c | ||
$ cd p2-succ-in-dest-c | ||||
The scenario here was that B::D were developed on default. B was queued on | ||||
stable, but amended before being push to hg-committed. C was queued on default, | ||||
along with unrelated J. | ||||
$ hg debugdrawdag <<EOF | ||||
> J | ||||
> | | ||||
> F | ||||
> | | ||||
> E | ||||
> | D | ||||
> | | | ||||
> | C # replace: C -> F | ||||
> | | H I # replace: B -> H -> I | ||||
> | B |/ | ||||
> |/ G | ||||
> A | ||||
> EOF | ||||
1 new orphan changesets | ||||
This strip seems to be the key to avoid an early divergence warning. | ||||
$ hg --config extensions.strip= --hidden strip -qr H | ||||
1 new orphan changesets | ||||
$ hg rebase -b 'desc("D")' -d 'desc("J")' | ||||
abort: this rebase will cause divergences from: 112478962961 | ||||
(to force the rebase please set experimental.evolution.allowdivergence=True) | ||||
[255] | ||||
|
r33863 | Rebase merge where both parents have successors in destination | ||
$ hg init p12-succ-in-dest | ||||
$ cd p12-succ-in-dest | ||||
$ hg debugdrawdag <<'EOS' | ||||
> E F | ||||
> /| /| # replace: A -> C | ||||
> A B C D # replace: B -> D | ||||
> | | | ||||
> X Y | ||||
> EOS | ||||
|
r35727 | 1 new orphan changesets | ||
|
r33863 | $ hg rebase -r A+B+E -d F | ||
|
r34011 | note: not rebasing 4:a3d17304151f "A" (A), already in destination as 0:96cc3511f894 "C" (C) | ||
note: not rebasing 5:b23a2cc00842 "B" (B), already in destination as 1:058c1e1fb10a "D" (D) | ||||
|
r33863 | rebasing 7:dac5d11c5a7d "E" (E tip) | ||
abort: rebasing 7:dac5d11c5a7d will include unwanted changes from 3:59c792af609c, 5:b23a2cc00842 or 2:ba2b7fa7166d, 4:a3d17304151f | ||||
[255] | ||||
$ cd .. | ||||
Rebase a non-clean merge. One parent has successor in destination, the other | ||||
parent moves as requested. | ||||
$ hg init p1-succ-p2-move | ||||
$ cd p1-succ-p2-move | ||||
$ hg debugdrawdag <<'EOS' | ||||
> D Z | ||||
> /| | # replace: A -> C | ||||
> A B C # D/D = D | ||||
> EOS | ||||
|
r35727 | 1 new orphan changesets | ||
|
r33863 | $ hg rebase -r A+B+D -d Z | ||
|
r34011 | note: not rebasing 0:426bada5c675 "A" (A), already in destination as 2:96cc3511f894 "C" (C) | ||
|
r33863 | rebasing 1:fc2b737bb2e5 "B" (B) | ||
rebasing 3:b8ed089c80ad "D" (D) | ||||
$ rm .hg/localtags | ||||
$ hg log -G | ||||
o 6:e4f78693cc88 D | ||||
| | ||||
o 5:76840d832e98 B | ||||
| | ||||
o 4:50e41c1f3950 Z | ||||
| | ||||
o 2:96cc3511f894 C | ||||
$ hg files -r tip | ||||
B | ||||
C | ||||
D | ||||
Z | ||||
$ cd .. | ||||
$ hg init p1-move-p2-succ | ||||
$ cd p1-move-p2-succ | ||||
$ hg debugdrawdag <<'EOS' | ||||
> D Z | ||||
> /| | # replace: B -> C | ||||
> A B C # D/D = D | ||||
> EOS | ||||
|
r35727 | 1 new orphan changesets | ||
|
r33863 | $ hg rebase -r B+A+D -d Z | ||
|
r34010 | rebasing 0:426bada5c675 "A" (A) | ||
|
r34011 | note: not rebasing 1:fc2b737bb2e5 "B" (B), already in destination as 2:96cc3511f894 "C" (C) | ||
|
r33863 | rebasing 3:b8ed089c80ad "D" (D) | ||
$ rm .hg/localtags | ||||
$ hg log -G | ||||
o 6:1b355ed94d82 D | ||||
| | ||||
o 5:a81a74d764a6 A | ||||
| | ||||
o 4:50e41c1f3950 Z | ||||
| | ||||
o 2:96cc3511f894 C | ||||
$ hg files -r tip | ||||
A | ||||
C | ||||
D | ||||
Z | ||||
$ cd .. | ||||
|
r29372 | Test that bookmark is moved and working dir is updated when all changesets have | ||
equivalents in destination | ||||
$ hg init rbsrepo && cd rbsrepo | ||||
$ echo "[experimental]" > .hg/hgrc | ||||
|
r34866 | $ echo "evolution=true" >> .hg/hgrc | ||
|
r29372 | $ echo "rebaseskipobsolete=on" >> .hg/hgrc | ||
$ echo root > root && hg ci -Am root | ||||
adding root | ||||
$ echo a > a && hg ci -Am a | ||||
adding a | ||||
$ hg up 0 | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ echo b > b && hg ci -Am b | ||||
adding b | ||||
created new head | ||||
$ hg rebase -r 2 -d 1 | ||||
rebasing 2:1e9a3c00cbe9 "b" (tip) | ||||
$ hg log -r . # working dir is at rev 3 (successor of 2) | ||||
3:be1832deae9a b (no-eol) | ||||
$ hg book -r 2 mybook --hidden # rev 2 has a bookmark on it now | ||||
|
r35629 | bookmarking hidden changeset 1e9a3c00cbe9 | ||
|
r35730 | (hidden revision '1e9a3c00cbe9' was rewritten as: be1832deae9a) | ||
|
r29372 | $ hg up 2 && hg log -r . # working dir is at rev 2 again | ||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
|
r35047 | 2:1e9a3c00cbe9 b (rewritten using rebase as 3:be1832deae9a) (no-eol) | ||
|
r34871 | $ hg rebase -r 2 -d 3 --config experimental.evolution.track-operation=1 | ||
|
r34011 | note: not rebasing 2:1e9a3c00cbe9 "b" (mybook), already in destination as 3:be1832deae9a "b" (tip) | ||
|
r34010 | Check that working directory and bookmark was updated to rev 3 although rev 2 | ||
was skipped | ||||
|
r29372 | $ hg log -r . | ||
|
r34010 | 3:be1832deae9a b (no-eol) | ||
|
r29372 | $ hg bookmarks | ||
|
r34010 | mybook 3:be1832deae9a | ||
r32354 | $ hg debugobsolete --rev tip | |||
|
r34962 | 1e9a3c00cbe90d236ac05ef61efcc5e40b7412bc be1832deae9ac531caa7438b8dcf6055a122cd8e 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} | ||
|
r34010 | |||
Obsoleted working parent and bookmark could be moved if an ancestor of working | ||||
parent gets moved: | ||||
$ hg init $TESTTMP/ancestor-wd-move | ||||
$ cd $TESTTMP/ancestor-wd-move | ||||
$ hg debugdrawdag <<'EOS' | ||||
> E D1 # rebase: D1 -> D2 | ||||
> | | | ||||
> | C | ||||
> D2 | | ||||
> | B | ||||
> |/ | ||||
> A | ||||
> EOS | ||||
$ hg update D1 -q | ||||
$ hg bookmark book -i | ||||
$ hg rebase -r B+D1 -d E | ||||
rebasing 1:112478962961 "B" (B) | ||||
|
r34291 | note: not rebasing 5:15ecf15e0114 "D1" (book D1 tip), already in destination as 2:0807738e0be9 "D2" (D2) | ||
|
r35727 | 1 new orphan changesets | ||
|
r34010 | $ hg log -G -T '{desc} {bookmarks}' | ||
@ B book | ||||
| | ||||
| x D1 | ||||
| | | ||||
o | E | ||||
| | | ||||
r35524 | | * C | |||
|
r34010 | | | | ||
o | D2 | ||||
| | | ||||
| x B | ||||
|/ | ||||
o A | ||||
|
r34094 | Rebasing a merge with one of its parent having a hidden successor | ||
$ hg init $TESTTMP/merge-p1-hidden-successor | ||||
$ cd $TESTTMP/merge-p1-hidden-successor | ||||
$ hg debugdrawdag <<'EOS' | ||||
> E | ||||
> | | ||||
> B3 B2 # amend: B1 -> B2 -> B3 | ||||
> |/ # B2 is hidden | ||||
> | D | ||||
> | |\ | ||||
> | B1 C | ||||
> |/ | ||||
> A | ||||
> EOS | ||||
|
r35727 | 1 new orphan changesets | ||
|
r34094 | |||
$ eval `hg tags -T '{tag}={node}\n'` | ||||
$ rm .hg/localtags | ||||
$ hg rebase -r $D -d $E | ||||
rebasing 5:9e62094e4d94 "D" | ||||
$ hg log -G | ||||
o 7:a699d059adcf D | ||||
|\ | ||||
| o 6:ecc93090a95c E | ||||
| | | ||||
| o 4:0dc878468a23 B3 | ||||
| | | ||||
o | 1:96cc3511f894 C | ||||
/ | ||||
o 0:426bada5c675 A | ||||
|
r34095 | For some reasons (--hidden, rebaseskipobsolete=0, directaccess, etc.), | ||
rebasestate may contain hidden hashes. "rebase --abort" should work regardless. | ||||
$ hg init $TESTTMP/hidden-state1 | ||||
$ cd $TESTTMP/hidden-state1 | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [experimental] | ||||
> rebaseskipobsolete=0 | ||||
> EOF | ||||
$ hg debugdrawdag <<'EOS' | ||||
> C | ||||
> | | ||||
> D B # prune: B, C | ||||
> |/ # B/D=B | ||||
> A | ||||
> EOS | ||||
$ eval `hg tags -T '{tag}={node}\n'` | ||||
$ rm .hg/localtags | ||||
$ hg update -q $C --hidden | ||||
|
r37939 | updated to hidden changeset 7829726be4dc | ||
|
r35729 | (hidden revision '7829726be4dc' is pruned) | ||
|
r34095 | $ hg rebase -s $B -d $D | ||
rebasing 1:2ec65233581b "B" | ||||
merging D | ||||
warning: conflicts while merging D! (edit, then use 'hg resolve --mark') | ||||
|
r45710 | unresolved conflicts (see 'hg resolve', then 'hg rebase --continue') | ||
|
r34095 | [1] | ||
$ cp -R . $TESTTMP/hidden-state2 | ||||
$ hg log -G | ||||
@ 2:b18e25de2cf5 D | ||||
| | ||||
|
r45972 | | % 1:2ec65233581b B (pruned using prune) | ||
|/ | ||||
|
r34095 | o 0:426bada5c675 A | ||
$ hg summary | ||||
parent: 2:b18e25de2cf5 tip | ||||
D | ||||
branch: default | ||||
|
r44821 | commit: 1 modified, 1 added, 1 unknown, 1 unresolved | ||
|
r45972 | update: 1 new changesets, 2 branch heads (merge) | ||
phases: 3 draft | ||||
|
r34095 | rebase: 0 rebased, 2 remaining (rebase --continue) | ||
$ hg rebase --abort | ||||
rebase aborted | ||||
Also test --continue for the above case | ||||
$ cd $TESTTMP/hidden-state2 | ||||
$ hg resolve -m | ||||
(no more unresolved files) | ||||
continue: hg rebase --continue | ||||
$ hg rebase --continue | ||||
rebasing 1:2ec65233581b "B" | ||||
rebasing 3:7829726be4dc "C" (tip) | ||||
$ hg log -G | ||||
@ 5:1964d5d5b547 C | ||||
| | ||||
o 4:68deb90c12a2 B | ||||
| | ||||
o 2:b18e25de2cf5 D | ||||
| | ||||
o 0:426bada5c675 A | ||||
|
r39128 | ==================== | ||
Test --stop option | | ||||
==================== | ||||
$ cd .. | ||||
$ hg init rbstop | ||||
$ cd rbstop | ||||
$ echo a>a | ||||
$ hg ci -Aqma | ||||
$ echo b>b | ||||
$ hg ci -Aqmb | ||||
$ echo c>c | ||||
$ hg ci -Aqmc | ||||
$ echo d>d | ||||
$ hg ci -Aqmd | ||||
$ hg up 0 -q | ||||
$ echo f>f | ||||
$ hg ci -Aqmf | ||||
$ echo D>d | ||||
$ hg ci -Aqm "conflict with d" | ||||
$ hg up 3 -q | ||||
$ hg log -G --template "{rev}:{short(node)} {person(author)}\n{firstline(desc)} {topic}\n\n" | ||||
o 5:00bfc9898aeb test | ||||
| conflict with d | ||||
| | ||||
o 4:dafd40200f93 test | ||||
| f | ||||
| | ||||
| @ 3:055a42cdd887 test | ||||
| | d | ||||
| | | ||||
| o 2:177f92b77385 test | ||||
| | c | ||||
| | | ||||
| o 1:d2ae7f538514 test | ||||
|/ b | ||||
| | ||||
o 0:cb9a9f314b8b test | ||||
a | ||||
$ hg rebase -s 1 -d 5 | ||||
rebasing 1:d2ae7f538514 "b" | ||||
rebasing 2:177f92b77385 "c" | ||||
rebasing 3:055a42cdd887 "d" | ||||
merging d | ||||
warning: conflicts while merging d! (edit, then use 'hg resolve --mark') | ||||
|
r45710 | unresolved conflicts (see 'hg resolve', then 'hg rebase --continue') | ||
|
r39128 | [1] | ||
$ hg rebase --stop | ||||
1 new orphan changesets | ||||
$ hg log -G --template "{rev}:{short(node)} {person(author)}\n{firstline(desc)} {topic}\n\n" | ||||
o 7:7fffad344617 test | ||||
| c | ||||
| | ||||
o 6:b15528633407 test | ||||
| b | ||||
| | ||||
o 5:00bfc9898aeb test | ||||
| conflict with d | ||||
| | ||||
o 4:dafd40200f93 test | ||||
| f | ||||
| | ||||
| @ 3:055a42cdd887 test | ||||
| | d | ||||
| | | ||||
| x 2:177f92b77385 test | ||||
| | c | ||||
| | | ||||
| x 1:d2ae7f538514 test | ||||
|/ b | ||||
| | ||||
o 0:cb9a9f314b8b test | ||||
a | ||||
Test it aborts if unstable csets is not allowed: | ||||
=============================================== | ||||
$ cat >> $HGRCPATH << EOF | ||||
> [experimental] | ||||
> evolution.allowunstable=False | ||||
> EOF | ||||
$ hg strip 6 --no-backup -q | ||||
$ hg log -G --template "{rev}:{short(node)} {person(author)}\n{firstline(desc)} {topic}\n\n" | ||||
o 5:00bfc9898aeb test | ||||
| conflict with d | ||||
| | ||||
o 4:dafd40200f93 test | ||||
| f | ||||
| | ||||
| @ 3:055a42cdd887 test | ||||
| | d | ||||
| | | ||||
| o 2:177f92b77385 test | ||||
| | c | ||||
| | | ||||
| o 1:d2ae7f538514 test | ||||
|/ b | ||||
| | ||||
o 0:cb9a9f314b8b test | ||||
a | ||||
$ hg rebase -s 1 -d 5 | ||||
rebasing 1:d2ae7f538514 "b" | ||||
rebasing 2:177f92b77385 "c" | ||||
rebasing 3:055a42cdd887 "d" | ||||
merging d | ||||
warning: conflicts while merging d! (edit, then use 'hg resolve --mark') | ||||
|
r45710 | unresolved conflicts (see 'hg resolve', then 'hg rebase --continue') | ||
|
r39128 | [1] | ||
$ hg rebase --stop | ||||
abort: cannot remove original changesets with unrebased descendants | ||||
(either enable obsmarkers to allow unstable revisions or use --keep to keep original changesets) | ||||
[255] | ||||
$ hg rebase --abort | ||||
saved backup bundle to $TESTTMP/rbstop/.hg/strip-backup/b15528633407-6eb72b6f-backup.hg | ||||
rebase aborted | ||||
Test --stop when --keep is passed: | ||||
================================== | ||||
$ hg rebase -s 1 -d 5 --keep | ||||
rebasing 1:d2ae7f538514 "b" | ||||
rebasing 2:177f92b77385 "c" | ||||
rebasing 3:055a42cdd887 "d" | ||||
merging d | ||||
warning: conflicts while merging d! (edit, then use 'hg resolve --mark') | ||||
|
r45710 | unresolved conflicts (see 'hg resolve', then 'hg rebase --continue') | ||
|
r39128 | [1] | ||
$ hg rebase --stop | ||||
$ hg log -G --template "{rev}:{short(node)} {person(author)}\n{firstline(desc)} {topic}\n\n" | ||||
o 7:7fffad344617 test | ||||
| c | ||||
| | ||||
o 6:b15528633407 test | ||||
| b | ||||
| | ||||
o 5:00bfc9898aeb test | ||||
| conflict with d | ||||
| | ||||
o 4:dafd40200f93 test | ||||
| f | ||||
| | ||||
| @ 3:055a42cdd887 test | ||||
| | d | ||||
| | | ||||
| o 2:177f92b77385 test | ||||
| | c | ||||
| | | ||||
| o 1:d2ae7f538514 test | ||||
|/ b | ||||
| | ||||
o 0:cb9a9f314b8b test | ||||
a | ||||
Test --stop aborts when --collapse was passed: | ||||
============================================= | ||||
$ cat >> $HGRCPATH << EOF | ||||
> [experimental] | ||||
> evolution.allowunstable=True | ||||
> EOF | ||||
$ hg strip 6 | ||||
saved backup bundle to $TESTTMP/rbstop/.hg/strip-backup/b15528633407-6eb72b6f-backup.hg | ||||
$ hg log -G --template "{rev}:{short(node)} {person(author)}\n{firstline(desc)} {topic}\n\n" | ||||
o 5:00bfc9898aeb test | ||||
| conflict with d | ||||
| | ||||
o 4:dafd40200f93 test | ||||
| f | ||||
| | ||||
| @ 3:055a42cdd887 test | ||||
| | d | ||||
| | | ||||
| o 2:177f92b77385 test | ||||
| | c | ||||
| | | ||||
| o 1:d2ae7f538514 test | ||||
|/ b | ||||
| | ||||
o 0:cb9a9f314b8b test | ||||
a | ||||
$ hg rebase -s 1 -d 5 --collapse -m "collapsed b c d" | ||||
rebasing 1:d2ae7f538514 "b" | ||||
rebasing 2:177f92b77385 "c" | ||||
rebasing 3:055a42cdd887 "d" | ||||
merging d | ||||
warning: conflicts while merging d! (edit, then use 'hg resolve --mark') | ||||
|
r45710 | unresolved conflicts (see 'hg resolve', then 'hg rebase --continue') | ||
|
r39128 | [1] | ||
$ hg rebase --stop | ||||
abort: cannot stop in --collapse session | ||||
[255] | ||||
$ hg rebase --abort | ||||
rebase aborted | ||||
$ hg diff | ||||
$ hg log -G --template "{rev}:{short(node)} {person(author)}\n{firstline(desc)} {topic}\n\n" | ||||
o 5:00bfc9898aeb test | ||||
| conflict with d | ||||
| | ||||
o 4:dafd40200f93 test | ||||
| f | ||||
| | ||||
| @ 3:055a42cdd887 test | ||||
| | d | ||||
| | | ||||
| o 2:177f92b77385 test | ||||
| | c | ||||
| | | ||||
| o 1:d2ae7f538514 test | ||||
|/ b | ||||
| | ||||
o 0:cb9a9f314b8b test | ||||
a | ||||
|
r39129 | Test --stop raise errors with conflicting options: | ||
================================================= | ||||
$ hg rebase -s 3 -d 5 | ||||
rebasing 3:055a42cdd887 "d" | ||||
merging d | ||||
warning: conflicts while merging d! (edit, then use 'hg resolve --mark') | ||||
|
r45710 | unresolved conflicts (see 'hg resolve', then 'hg rebase --continue') | ||
|
r39129 | [1] | ||
$ hg rebase --stop --dry-run | ||||
|
r44379 | abort: cannot specify both --stop and --dry-run | ||
|
r39129 | [255] | ||
$ hg rebase -s 3 -d 5 | ||||
abort: rebase in progress | ||||
|
r45774 | (use 'hg rebase --continue', 'hg rebase --abort', or 'hg rebase --stop') | ||
|
r39129 | [255] | ||
$ hg rebase --stop --continue | ||||
|
r44351 | abort: cannot specify both --stop and --continue | ||
|
r39129 | [255] | ||
|
r39131 | |||
Test --stop moves bookmarks of original revisions to new rebased nodes: | ||||
====================================================================== | ||||
$ cd .. | ||||
$ hg init repo | ||||
$ cd repo | ||||
$ echo a > a | ||||
$ hg ci -Am A | ||||
adding a | ||||
$ echo b > b | ||||
$ hg ci -Am B | ||||
adding b | ||||
$ hg book X | ||||
$ hg book Y | ||||
$ echo c > c | ||||
$ hg ci -Am C | ||||
adding c | ||||
$ hg book Z | ||||
$ echo d > d | ||||
$ hg ci -Am D | ||||
adding d | ||||
$ hg up 0 -q | ||||
$ echo e > e | ||||
$ hg ci -Am E | ||||
adding e | ||||
created new head | ||||
$ echo doubt > d | ||||
$ hg ci -Am "conflict with d" | ||||
adding d | ||||
$ hg log -GT "{rev}: {node|short} '{desc}' bookmarks: {bookmarks}\n" | ||||
@ 5: 39adf30bc1be 'conflict with d' bookmarks: | ||||
| | ||||
o 4: 9c1e55f411b6 'E' bookmarks: | ||||
| | ||||
| o 3: 67a385d4e6f2 'D' bookmarks: Z | ||||
| | | ||||
| o 2: 49cb3485fa0c 'C' bookmarks: Y | ||||
| | | ||||
| o 1: 6c81ed0049f8 'B' bookmarks: X | ||||
|/ | ||||
o 0: 1994f17a630e 'A' bookmarks: | ||||
$ hg rebase -s 1 -d 5 | ||||
rebasing 1:6c81ed0049f8 "B" (X) | ||||
rebasing 2:49cb3485fa0c "C" (Y) | ||||
rebasing 3:67a385d4e6f2 "D" (Z) | ||||
merging d | ||||
warning: conflicts while merging d! (edit, then use 'hg resolve --mark') | ||||
|
r45710 | unresolved conflicts (see 'hg resolve', then 'hg rebase --continue') | ||
|
r39131 | [1] | ||
$ hg rebase --stop | ||||
1 new orphan changesets | ||||
$ hg log -GT "{rev}: {node|short} '{desc}' bookmarks: {bookmarks}\n" | ||||
o 7: 9c86c650b686 'C' bookmarks: Y | ||||
| | ||||
o 6: 9b87b54e5fd8 'B' bookmarks: X | ||||
| | ||||
@ 5: 39adf30bc1be 'conflict with d' bookmarks: | ||||
| | ||||
o 4: 9c1e55f411b6 'E' bookmarks: | ||||
| | ||||
| * 3: 67a385d4e6f2 'D' bookmarks: Z | ||||
| | | ||||
| x 2: 49cb3485fa0c 'C' bookmarks: | ||||
| | | ||||
| x 1: 6c81ed0049f8 'B' bookmarks: | ||||
|/ | ||||
o 0: 1994f17a630e 'A' bookmarks: | ||||