From patchwork Fri Jul 23 07:17:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D11209: fix: rewrite writeworkingdir() to explicitly not work with merges From: phabricator X-Patchwork-Id: 49523 Message-Id: To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Fri, 23 Jul 2021 07:17:10 +0000 martinvonz created this revision. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches. REVISION SUMMARY `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. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D11209 AFFECTED FILES hgext/fix.py CHANGE DETAILS To: martinvonz, #hg-reviewers Cc: mercurial-patches, mercurial-devel diff --git a/hgext/fix.py b/hgext/fix.py --- a/hgext/fix.py +++ b/hgext/fix.py @@ -133,6 +133,7 @@ from mercurial.i18n import _ from mercurial.node import ( nullrev, + nullid, 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):