[Request] [+- ] D11376: fix: again allow formatting the working copy while merging
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Fri Aug 27 21:08:33 UTC 2021
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
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])
To: martinvonz, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mercurial-scm.org/pipermail/mercurial-patches/attachments/20210827/abcef56b/attachment-0001.html>
More information about the Mercurial-patches
mailing list