hgext3rd/evolve/evolvecmd.py
changeset 3787 dc81a788f278
parent 3774 4736d0bb81bf
child 3788 ae30da2e210d
--- a/hgext3rd/evolve/evolvecmd.py	Sun Jun 03 01:59:41 2018 +0530
+++ b/hgext3rd/evolve/evolvecmd.py	Tue Jun 05 00:53:21 2018 +0530
@@ -33,6 +33,7 @@
 from mercurial.i18n import _
 
 from . import (
+    cmdrewrite,
     compat,
     exthelper,
     rewriteutil,
@@ -446,23 +447,25 @@
     tr = repo.currenttransaction()
     assert tr is not None
     try:
+        repo.ui.setconfig('ui', 'allowemptycommit', True, 'evolve')
         with repo.dirstate.parentchange():
-            repo.dirstate.setparents(divergent.p1().node(), node.nullid)
+            repo.dirstate.setparents(divergent.node(), node.nullid)
+        oldlen = len(repo)
+        # temporary hack because we can't use cmdrewrite.amend() during an
+        # interrupted evolve
+        evolvestate.delete()
 
-        newnode = repo.commit(text=divergent.description(), user=repo.ui.username())
-        if newnode == divergent.node() or newnode is None:
-            # no changes
+        # XXX: we should not use amend here, rather create a new commit
+        cmdrewrite.amend(ui, repo, message='', logfile='')
+        # XXX: we can get rid of this len() call also by creating a new commit
+        if oldlen == len(repo):
             new = divergent
-            repo.ui.status(_("nothing changed\n"))
-            hg.updaterepo(repo, divergent.rev(), False)
-            obsolete.createmarkers(repo, [(other, (new,))], operation='evolve')
+            # no changes
         else:
-            new = repo[newnode]
-            hg.updaterepo(repo, new.rev(), False)
-            obsolete.createmarkers(repo, [(other, (new,))], operation='evolve')
-            obsolete.createmarkers(repo, [(divergent, (new,))], operation='evolve')
+            new = repo['.']
 
         # creating markers and moving phases post-resolution
+        obsolete.createmarkers(repo, [(other, (new,))], operation='evolve')
         phases.retractboundary(repo, tr, other.phase(), [new.node()])
         return (True, new.node())
     finally: