evolve: handle case when newnode can be None while continuing evolve
There can be case when `hg evolve --continue` is run, when working directory is
clean and there is nothing to be included in the new commit. Let's make sure we
handle such cases correctly and obsolete the node which is evolved with parent
of wdir as successor. This is same as what rebase does.
Testing the continue functionality of `hg evolve`
$ cat >> $HGRCPATH <<EOF
> [ui]
> interactive = True
> [alias]
> glog = log -GT "{rev}:{node|short} {desc}\n ({bookmarks}) {phase}"
> [extensions]
> rebase =
> EOF
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH
Setting up the repo
$ hg init repo
$ cd repo
$ 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
Simple case of evolve --continue
$ hg up ca1b80f7960a
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo bar > d
$ hg add d
$ hg amend
1 new orphan changesets
$ hg glog
@ 5:cb6a2ab625bb 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 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 update -C .' 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"
$ hg glog
@ 6:2a4e03d422e2 added d
| () draft
o 5:cb6a2ab625bb added c
| () draft
o 2:b1661037fa25 added b
| () draft
o 1:c7586e2a9264 added a
| () draft
o 0:8fa14d15e168 added hgignore
() draft
Case when conflicts resolution lead to empty wdir in evolve --continue
$ echo foo > e
$ hg ci -Aqm "added e"
$ hg prev
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
[6] added d
$ echo bar > e
$ hg add e
$ hg amend
1 new orphan changesets
$ hg glog
@ 8:00a5c774cc37 added d
| () draft
| * 7:ad0a59d83efe added e
| | () draft
| x 6:2a4e03d422e2 added d
|/ () draft
o 5:cb6a2ab625bb added c
| () draft
o 2:b1661037fa25 added b
| () draft
o 1:c7586e2a9264 added a
| () draft
o 0:8fa14d15e168 added hgignore
() draft
$ hg evolve
move:[7] added e
atop:[8] added d
merging e
warning: conflicts while merging e! (edit, then use 'hg resolve --mark')
evolve failed!
fix conflict and run 'hg evolve --continue' or use 'hg update -C .' to abort
abort: unresolved merge conflicts (see hg help resolve)
[255]
$ echo bar > e
$ hg resolve -m
(no more unresolved files)
continue: hg evolve --continue
$ hg diff
XXX: maybe we should add a message here about evolve resulting in no commit
$ hg evolve --continue
evolving 7:ad0a59d83efe "added e"
$ hg glog
@ 8:00a5c774cc37 added d
| () draft
o 5:cb6a2ab625bb added c
| () draft
o 2:b1661037fa25 added b
| () draft
o 1:c7586e2a9264 added a
| () draft
o 0:8fa14d15e168 added hgignore
() draft