diff hgext/evolve.py @ 284:88a851a54f26

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.
author Patrick Mezard <patrick@mezard.eu>
date Tue, 19 Jun 2012 17:57:54 +0200
parents 78d01e341438
children 98c9c69c311d
line wrap: on
line diff
--- 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: