evolve: fix relocate() with removed revision
relocate() was not handling the case where the rebased revision was
discarded and was raising when trying to update the phase of None.
--- a/hgext/evolve.py Tue Jun 19 17:58:49 2012 +0200
+++ b/hgext/evolve.py Tue Jun 19 17:57:54 2012 +0200
@@ -180,11 +180,17 @@
rebase.rebasenode(repo, orig.node(), dest.node(),
{node.nullrev: node.nullrev})
nodenew = rebase.concludenode(repo, orig.node(), dest.node(), node.nullid)
- phases.retractboundary(repo, destphase, [nodenew])
- repo.addobsolete(nodenew, nodesrc)
oldbookmarks = repo.nodebookmarks(nodesrc)
- for book in oldbookmarks:
- repo._bookmarks[book] = nodenew
+ if nodenew is not None:
+ phases.retractboundary(repo, destphase, [nodenew])
+ repo.addobsolete(nodenew, nodesrc)
+ for book in oldbookmarks:
+ repo._bookmarks[book] = nodenew
+ else:
+ repo.addobsolete(node.nullid, nodesrc)
+ # Behave like rebase, move bookmarks to dest
+ for book in oldbookmarks:
+ repo._bookmarks[book] = dest.node()
for book in destbookmarks: # restore bookmark that rebase move
repo._bookmarks[book] = dest.node()
if oldbookmarks or destbookmarks:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-stabilize-result.t Tue Jun 19 17:57:54 2012 +0200
@@ -0,0 +1,52 @@
+ $ cat >> $HGRCPATH <<EOF
+ > [defaults]
+ > amend=-d "0 0"
+ > [extensions]
+ > hgext.rebase=
+ > hgext.graphlog=
+ > EOF
+ $ echo "obsolete=$(echo $(dirname $TESTDIR))/hgext/obsolete.py" >> $HGRCPATH
+ $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
+
+ $ glog() {
+ > hg glog --template \
+ > '{rev}:{node|short}@{branch}({phase}) bk:[{bookmarks}] {desc|firstline}\n' "$@"
+ > }
+
+Test stabilize removing the changeset being stabilized
+
+ $ hg init empty
+ $ cd empty
+ $ echo a > a
+ $ hg ci -Am adda a
+ $ echo b > b
+ $ hg ci -Am addb b
+ $ echo a >> a
+ $ hg ci -m changea
+ $ hg bookmark changea
+ $ hg up 1
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo a >> a
+ $ hg amend -m changea
+ 1 new unstables changesets
+ $ hg stabilize -v
+ move:[2] changea
+ atop:[4] changea
+ hg rebase -Dr cce2c55b8965 -d 1447e1c4828d
+ resolving manifests
+ $ glog --hidden
+ @ 4:1447e1c4828d@default(draft) bk:[changea] changea
+ |
+ | o 3:41ad4fe8c795@default(secret) bk:[] amends 102a90ea7b4a3361e4082ed620918c261189a36a
+ | |
+ | | o 2:cce2c55b8965@default(secret) bk:[] changea
+ | |/
+ | o 1:102a90ea7b4a@default(secret) bk:[] addb
+ |/
+ o 0:07f494440405@default(draft) bk:[] adda
+
+ $ hg debugsuccessors
+ 102a90ea7b4a 1447e1c4828d
+ 102a90ea7b4a 41ad4fe8c795
+ 41ad4fe8c795 1447e1c4828d
+ cce2c55b8965 000000000000