fix: rewrite writeworkingdir() to explicitly not work with merges stable
authorMartin von Zweigbergk <martinvonz@google.com>
Mon, 11 Mar 2019 10:56:56 -0700
branchstable
changeset 47766 3feda1e779d4
parent 47765 184d83ef2e59
child 47767 66ad7e32011f
fix: rewrite writeworkingdir() to explicitly not work with merges `hg fix` errors out early if there is an unfinished merge, so we should have only one parent here. Making that explicit makes my next patches simpler. Differential Revision: https://phab.mercurial-scm.org/D11209
hgext/fix.py
--- a/hgext/fix.py	Thu Jul 22 17:12:56 2021 -0700
+++ b/hgext/fix.py	Mon Mar 11 10:56:56 2019 -0700
@@ -132,6 +132,7 @@
 
 from mercurial.i18n import _
 from mercurial.node import (
+    nullid,
     nullrev,
     wdirrev,
 )
@@ -753,16 +754,18 @@
 
     Directly updates the dirstate for the affected files.
     """
+    assert repo.dirstate.p2() == nullid
+
     for path, data in pycompat.iteritems(filedata):
         fctx = ctx[path]
         fctx.write(data, fctx.flags())
         if repo.dirstate[path] == b'n':
             repo.dirstate.set_possibly_dirty(path)
 
-    oldparentnodes = repo.dirstate.parents()
-    newparentnodes = [replacements.get(n, n) for n in oldparentnodes]
-    if newparentnodes != oldparentnodes:
-        repo.setparents(*newparentnodes)
+    oldp1 = repo.dirstate.p1()
+    newp1 = replacements.get(oldp1, oldp1)
+    if newp1 != oldp1:
+        repo.setparents(newp1, nullid)
 
 
 def replacerev(ui, repo, ctx, filedata, replacements):