evolve: make sure user can recover from conflict (issue6053)
we make sure while continuing interrupted evolve it reach to right code
This patch fix the issue6053 which is about falling evolve into unrecoverable
state and this is how it call fall into it:
If after some rewrite operations we reach to a point where resparent for
two content divergent csets is obsolete and we hit a conflict in
relocation, so now if you run `hg evolve --continue` after resolving
the conflict: code execution would check if wdir parent is obsolete
and run solveobswdp() rather than going to continueevolve() part
and there we will hit by a "abort: outstanding uncommitted merge"
And same for `--abort` or `--stop` flags.
Changes in tests reflect the fixed behaviour.
This test file test the #6028 issue
evolve fails with mercurial.error.ProgrammingError: unsupported changeid '' of type <type 'str'>
https://bz.mercurial-scm.org/show_bug.cgi?id=6028
Global setup
============
$ . $TESTDIR/testlib/common.sh
$ cat >> $HGRCPATH <<EOF
> [ui]
> interactive = true
> [phases]
> publish=False
> [extensions]
> evolve =
> topic =
> EOF
Test
====
$ hg init $TESTTMP/issue-6028
$ cd $TESTTMP/issue-6028
create initial commit
$ echo "0" > 0
$ hg ci -Am 0
adding 0
$ hg up default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg topics a
marked working directory as topic: a
$ echo "a" > a
$ hg ci -Am a
adding a
active topic 'a' grew its first changeset
(see 'hg help topics' for more information)
$ hg up default
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg topics b
marked working directory as topic: b
$ echo "b" > b
$ hg ci -Am b
adding b
active topic 'b' grew its first changeset
(see 'hg help topics' for more information)
$ hg up default
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg branch integration
marked working directory as branch integration
$ hg merge a
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg ci -m "merged a"
$ hg merge b
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg ci -m "merged b"
$ hg up a
switching to topic a
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo "a bad commit" >> a_bad_commit
$ hg add a_bad_commit
$ hg ci -m "a bad commit"
$ hg up integration
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg merge a
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg ci -m "merged a bad commit"
$ hg up a
switching to topic a
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo "aa" >> a
$ hg ci -m "aa"
$ hg up integration
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg merge a
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg ci -m "merged aa"
$ hg up b
switching to topic b
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ echo "bb" >> b
$ hg ci -m "bb"
$ hg up integration
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg merge b
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg ci -m "merged bb"
create instability by pruning two changesets, one in a topic, one in a merge
$ hg prune -r 5:6
2 changesets pruned
3 new orphan changesets
$ hg up 4
2 files updated, 0 files merged, 1 files removed, 0 files unresolved
start the evolve
$ hg evolve
move:[8] merged aa
atop:[4] merged b
working directory is now at c920dd828523
evolve creates an obsolete changeset above as 11
$ hg evolve -r .
cannot solve instability of c920dd828523, skipping
cannot solve instability of c920dd828523, skipping