diff -r 44542ac10170 -r 85ad555d6ff7 tests/test-evolve-abort-orphan.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-evolve-abort-orphan.t Wed May 23 01:27:13 2018 +0530 @@ -0,0 +1,504 @@ +Tests for the --abort flag for `hg evolve` command while orphan resolution +========================================================================== + +The `--abort` flag aborts the interrupted evolve by undoing all the work which +was done during resolution i.e. stripping new changesets created, moving +bookmarks back, moving working directory back. + +This test contains cases when `hg evolve` is doing orphan resolution. + +Setup +===== + + $ cat >> $HGRCPATH < [phases] + > publish = False + > [alias] + > glog = log -GT "{rev}:{node|short} {desc}\n ({bookmarks}) {phase}" + > [extensions] + > EOF + $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH + + $ hg init abortrepo + $ cd abortrepo + $ echo ".*\.orig" > .hgignore + $ hg add .hgignore + $ hg ci -m "added hgignore" + $ for ch in a b c d; do echo foo > $ch; hg add $ch; hg ci -qm "added "$ch; done; + + $ hg glog + @ 4:c41c793e0ef1 added d + | () draft + o 3:ca1b80f7960a added c + | () draft + o 2:b1661037fa25 added b + | () draft + o 1:c7586e2a9264 added a + | () draft + o 0:8fa14d15e168 added hgignore + () draft + +Testing --abort when no evolve is interrupted +============================================= + + $ hg evolve --abort + abort: no interrupted evolve to stop + [255] + +Testing with wrong combination of flags +======================================= + + $ hg evolve --abort --continue + abort: cannot specify both "--abort" and "--continue" + [255] + + $ hg evolve --abort --stop + abort: cannot specify both "--abort" and "--stop" + [255] + + $ hg evolve --abort --rev 3 + abort: cannot specify both "--rev" and "--abort" + [255] + + $ hg evolve --abort --any + abort: cannot specify both "--any" and "--abort" + [255] + + $ hg evolve --abort --all + abort: cannot specify both "--all" and "--abort" + [255] + +Normal testingw when no rev was evolved +======================================== + + $ hg prev + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + [3] added c + + $ echo babar > d + $ hg add d + $ hg amend + 1 new orphan changesets + + $ hg evolve --all + move:[4] added d + atop:[5] added c + merging d + warning: conflicts while merging d! (edit, then use 'hg resolve --mark') + evolve failed! + fix conflict and run 'hg evolve --continue' or use 'hg evolve --abort' to abort + abort: unresolved merge conflicts (see hg help resolve) + [255] + + $ hg evolve --abort + evolve aborted + working directory is now at e93a9161a274 + + $ hg glog + @ 5:e93a9161a274 added c + | () draft + | * 4:c41c793e0ef1 added d + | | () draft + | x 3:ca1b80f7960a added c + |/ () draft + o 2:b1661037fa25 added b + | () draft + o 1:c7586e2a9264 added a + | () draft + o 0:8fa14d15e168 added hgignore + () draft + + $ hg diff + + $ hg status + +cleaning up things for next testing + + $ hg evolve --all + move:[4] added d + atop:[5] added c + merging d + warning: conflicts while merging d! (edit, then use 'hg resolve --mark') + evolve failed! + fix conflict and run 'hg evolve --continue' or use 'hg evolve --abort' to abort + abort: unresolved merge conflicts (see hg help resolve) + [255] + $ echo foo > d + $ hg resolve -m + (no more unresolved files) + continue: hg evolve --continue + $ hg evolve --continue + evolving 4:c41c793e0ef1 "added d" + working directory is now at e83de241f751 + + $ hg up .^^^ + 0 files updated, 0 files merged, 3 files removed, 0 files unresolved + +When there are evolved revisions but on a single branch +======================================================= + + $ echo bar > c + $ hg add c + $ hg amend + 3 new orphan changesets + + $ hg evolve --all + move:[2] added b + atop:[7] added a + move:[5] added c + atop:[8] added b + merging c + warning: conflicts while merging c! (edit, then use 'hg resolve --mark') + evolve failed! + fix conflict and run 'hg evolve --continue' or use 'hg evolve --abort' to abort + abort: unresolved merge conflicts (see hg help resolve) + [255] + + $ hg glog + @ 8:0c41ec482070 added b + | () draft + o 7:125af0ed8cae added a + | () draft + | * 6:e83de241f751 added d + | | () draft + | * 5:e93a9161a274 added c + | | () draft + | x 2:b1661037fa25 added b + | | () draft + | x 1:c7586e2a9264 added a + |/ () draft + o 0:8fa14d15e168 added hgignore + () draft + + $ hg evolve --abort + 1 new orphan changesets + evolve aborted + working directory is now at 125af0ed8cae + + $ hg glog + @ 7:125af0ed8cae added a + | () draft + | * 6:e83de241f751 added d + | | () draft + | * 5:e93a9161a274 added c + | | () draft + | * 2:b1661037fa25 added b + | | () draft + | x 1:c7586e2a9264 added a + |/ () draft + o 0:8fa14d15e168 added hgignore + () draft + + $ cd .. + +Testing when evolved revs are on multiple branches +================================================== + + $ hg init repotwo + $ cd repotwo + $ echo ".*\.orig" > .hgignore + $ hg add .hgignore + $ hg ci -m "added hgignore" + $ echo a > a + $ hg ci -Aqm "added a" + $ for ch in b c; do echo $ch > $ch; hg add $ch; hg ci -m "added "$ch; done; + $ hg up .^^ + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ for ch in c d; do echo $ ch > $ch; hg add $ch; hg ci -m "added "$ch; done; + created new head + $ hg up .^^ + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ echo foo > a + $ hg ci -m "foo to a" + created new head + + $ hg glog + @ 6:8f20d4390c21 foo to a + | () draft + | o 5:bcb1c47f8520 added d + | | () draft + | o 4:86d2603075a3 added c + |/ () draft + | o 3:17509928e5bf added c + | | () draft + | o 2:9f0c80a55ddc added b + |/ () draft + o 1:2f913b0c9220 added a + | () draft + o 0:8fa14d15e168 added hgignore + () draft + + $ hg prev + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + [1] added a + $ echo aa > a + $ hg amend + 5 new orphan changesets + + $ hg evolve --all + move:[2] added b + atop:[7] added a + move:[4] added c + atop:[7] added a + move:[6] foo to a + atop:[7] added a + merging a + warning: conflicts while merging a! (edit, then use 'hg resolve --mark') + evolve failed! + fix conflict and run 'hg evolve --continue' or use 'hg evolve --abort' to abort + abort: unresolved merge conflicts (see hg help resolve) + [255] + + $ hg glog + o 9:7f8e8bd9f0b6 added c + | () draft + | o 8:db3b42ef4da7 added b + |/ () draft + @ 7:807e8e2ca559 added a + | () draft + | * 6:8f20d4390c21 foo to a + | | () draft + | | * 5:bcb1c47f8520 added d + | | | () draft + | | x 4:86d2603075a3 added c + | |/ () draft + | | * 3:17509928e5bf added c + | | | () draft + | | x 2:9f0c80a55ddc added b + | |/ () draft + | x 1:2f913b0c9220 added a + |/ () draft + o 0:8fa14d15e168 added hgignore + () draft + + $ hg evolve --abort + 2 new orphan changesets + evolve aborted + working directory is now at 807e8e2ca559 + + $ hg glog + @ 7:807e8e2ca559 added a + | () draft + | * 6:8f20d4390c21 foo to a + | | () draft + | | * 5:bcb1c47f8520 added d + | | | () draft + | | * 4:86d2603075a3 added c + | |/ () draft + | | * 3:17509928e5bf added c + | | | () draft + | | * 2:9f0c80a55ddc added b + | |/ () draft + | x 1:2f913b0c9220 added a + |/ () draft + o 0:8fa14d15e168 added hgignore + () draft + + $ hg status + + $ hg diff + +Testing when user created a new changesets on top of evolved revisions +====================================================================== + + $ hg evolve --all + move:[2] added b + atop:[7] added a + move:[4] added c + atop:[7] added a + move:[6] foo to a + atop:[7] added a + merging a + warning: conflicts while merging a! (edit, then use 'hg resolve --mark') + evolve failed! + fix conflict and run 'hg evolve --continue' or use 'hg evolve --abort' to abort + abort: unresolved merge conflicts (see hg help resolve) + [255] + $ hg glog + o 9:7f8e8bd9f0b6 added c + | () draft + | o 8:db3b42ef4da7 added b + |/ () draft + @ 7:807e8e2ca559 added a + | () draft + | * 6:8f20d4390c21 foo to a + | | () draft + | | * 5:bcb1c47f8520 added d + | | | () draft + | | x 4:86d2603075a3 added c + | |/ () draft + | | * 3:17509928e5bf added c + | | | () draft + | | x 2:9f0c80a55ddc added b + | |/ () draft + | x 1:2f913b0c9220 added a + |/ () draft + o 0:8fa14d15e168 added hgignore + () draft + + $ echo foo > a + $ hg resolve -m + (no more unresolved files) + continue: hg evolve --continue + + $ cd .. + $ hg init clonerepo + $ cd repotwo + $ hg push ../clonerepo --force + pushing to ../clonerepo + searching for changes + adding changesets + adding manifests + adding file changes + added 10 changesets with 8 changes to 5 files (+4 heads) + 3 new obsolescence markers + 3 new orphan changesets + $ cd ../clonerepo + $ hg up 7f8e8bd9f0b6 + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo bar > bar + $ hg add bar + $ hg ci -m "made an new commit on evolved rev" + + $ hg push ../repotwo --force + pushing to ../repotwo + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + $ cd ../repotwo + $ hg evolve --abort + warning: new changesets detected on destination branch + abort: unable to abort interrupted evolve, use 'hg evolve --stop' to stop evolve + [255] + + $ hg evolve --stop + stopped the interrupted evolve + working directory is now at 807e8e2ca559 + +Testing when the evolved revision turned public due to some other user actions +============================================================================== + + $ hg evolve --all + move:[3] added c + atop:[8] added b + move:[5] added d + atop:[9] added c + move:[6] foo to a + atop:[7] added a + merging a + warning: conflicts while merging a! (edit, then use 'hg resolve --mark') + evolve failed! + fix conflict and run 'hg evolve --continue' or use 'hg evolve --abort' to abort + abort: unresolved merge conflicts (see hg help resolve) + [255] + + $ hg glog + o 12:1c476940790a added d + | () draft + | o 11:c10a55eb0cc6 added c + | | () draft + +---o 10:48eca1ed5478 made an new commit on evolved rev + | | () draft + o | 9:7f8e8bd9f0b6 added c + | | () draft + | o 8:db3b42ef4da7 added b + |/ () draft + @ 7:807e8e2ca559 added a + | () draft + | * 6:8f20d4390c21 foo to a + | | () draft + | x 1:2f913b0c9220 added a + |/ () draft + o 0:8fa14d15e168 added hgignore + () draft + + $ hg phase -r 1c476940790a --public + + $ hg evolve --abort + cannot clean up public changesets: 1c476940790a + abort: unable to abort interrupted evolve, use 'hg evolve --stop' to stop evolve + [255] + + $ hg evolve --stop + stopped the interrupted evolve + working directory is now at 807e8e2ca559 + + $ cd .. + +Testing that bookmark should be moved back when doing `hg evolve --abort` +========================================================================= + + $ hg init repothree + $ cd repothree + $ echo ".*\.orig" > .hgignore + $ hg add .hgignore + $ hg ci -m "added hgignore" + $ for ch in a b c; do echo $ch > $ch; hg add $ch; hg ci -m "added "$ch; done; + + $ hg up .^ + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg bookmark bm1 + $ hg up .^ + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + (leaving bookmark bm1) + $ echo foo > c + $ hg add c + $ hg amend + 2 new orphan changesets + + $ hg glog + @ 4:a0086c17bfc7 added a + | () draft + | * 3:17509928e5bf added c + | | () draft + | * 2:9f0c80a55ddc added b + | | (bm1) draft + | x 1:2f913b0c9220 added a + |/ () draft + o 0:8fa14d15e168 added hgignore + () draft + + $ hg evolve --all + move:[2] added b + atop:[4] added a + move:[3] added c + atop:[5] added b + merging c + warning: conflicts while merging c! (edit, then use 'hg resolve --mark') + evolve failed! + fix conflict and run 'hg evolve --continue' or use 'hg evolve --abort' to abort + abort: unresolved merge conflicts (see hg help resolve) + [255] + + $ hg glog + @ 5:c1f4718020e3 added b + | (bm1) draft + o 4:a0086c17bfc7 added a + | () draft + | * 3:17509928e5bf added c + | | () draft + | x 2:9f0c80a55ddc added b + | | () draft + | x 1:2f913b0c9220 added a + |/ () draft + o 0:8fa14d15e168 added hgignore + () draft + + $ hg evolve --abort + 1 new orphan changesets + evolve aborted + working directory is now at a0086c17bfc7 + + $ hg glog + @ 4:a0086c17bfc7 added a + | () draft + | * 3:17509928e5bf added c + | | () draft + | * 2:9f0c80a55ddc added b + | | (bm1) draft + | x 1:2f913b0c9220 added a + |/ () draft + o 0:8fa14d15e168 added hgignore + () draft