Read about our upcoming Code of Conduct on this issue

Commit 7c7a4482 authored by Martin von Zweigbergk's avatar Martin von Zweigbergk
Browse files

fix: again allow formatting the working copy while merging

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.

Differential Revision: https://phab.mercurial-scm.org/D11376

--HG--
branch : stable
parent 3962503cd1e8
Pipeline #26420 failed with stages
in 62 minutes and 21 seconds
......@@ -752,8 +752,6 @@ def writeworkingdir(repo, ctx, filedata, replacements):
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 @@ def writeworkingdir(repo, ctx, filedata, replacements):
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])
......
......@@ -871,6 +871,45 @@ prevents us from forgetting fixes made in either parent.
$ 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.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment