evolvecmd: add comments and new lines in content-divergence handling logic
I have visited this logic three times in last 10 days and I have to re-read the
whole code to make sure I don't miss any part. Adding comments will help
understanding the code in better and fast way.
Tests for the --abort flag for `hg evolve` command
==================================================
Setup
=====
$ cat >> $HGRCPATH <<EOF
> [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