Patchwork D11376: fix: again allow formatting the working copy while merging

login
register
mail settings
Submitter phabricator
Date Aug. 27, 2021, 9:08 p.m.
Message ID <differential-rev-PHID-DREV-fm3yzsgi4ddjvdup5cu4-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/49691/
State Superseded
Headers show

Comments

phabricator - Aug. 27, 2021, 9:08 p.m.
martinvonz created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  I forgot about unfinished merges (I think I was thinking only about
  unfinished merge conflicts) when I wrote
  https://phab.mercurial-scm.org/D11209. As a coworker (hg contributor
  dploch) reported to me, this led to `hg fix --working-dir` failing
  when you have an uncommitted merge. The fix is trivial: just move the
  assertion to just before the call to `scmutil.movedirstate()` where it
  actually matters.

REPOSITORY
  rHG Mercurial

BRANCH
  stable

REVISION DETAIL
  https://phab.mercurial-scm.org/D11376

AFFECTED FILES
  hgext/fix.py
  tests/test-fix.t

CHANGE DETAILS




To: martinvonz, #hg-reviewers
Cc: mercurial-patches, mercurial-devel

Patch

diff --git a/tests/test-fix.t b/tests/test-fix.t
--- a/tests/test-fix.t
+++ b/tests/test-fix.t
@@ -871,6 +871,45 @@ 
 
   $ cd ..
 
+We should be allowed to fix the working (and only the working copy) while
+merging.
+
+  $ hg init fixworkingcopywhilemerging
+  $ cd fixworkingcopywhilemerging
+
+  $ printf "a\nb\nc\n" > file.changed
+  $ hg commit -Aqm "ancestor"
+
+  $ printf "aa\nb\nc\n" > file.changed
+  $ hg commit -m "change a"
+
+  $ hg checkout '.^'
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ printf "a\nb\ncc\n" > file.changed
+  $ hg commit -m "change c"
+  created new head
+
+  $ hg merge
+  merging file.changed
+  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  $ cat file.changed
+  aa
+  b
+  cc
+Not allowed to fix a parent of the working copy while merging
+  $ hg fix -r . --working-dir
+  abort: outstanding uncommitted merge
+  (use 'hg commit' or 'hg merge --abort')
+  [20]
+  $ hg fix --working-dir
+  $ cat file.changed
+  AA
+  b
+  CC
+
+  $ cd ..
+
 Abort fixing revisions if there is an unfinished operation. We don't want to
 make things worse by editing files or stripping/obsoleting things. Also abort
 fixing the working directory if there are unresolved merge conflicts.
diff --git a/hgext/fix.py b/hgext/fix.py
--- a/hgext/fix.py
+++ b/hgext/fix.py
@@ -752,8 +752,6 @@ 
 
     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())
@@ -761,6 +759,7 @@ 
     oldp1 = repo.dirstate.p1()
     newp1 = replacements.get(oldp1, oldp1)
     if newp1 != oldp1:
+        assert repo.dirstate.p2() == nullid
         with repo.dirstate.parentchange():
             scmutil.movedirstate(repo, repo[newp1])