Mercurial > hg
changeset 47886:86a60679cf61 stable 5.9.1
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
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Fri, 27 Aug 2021 13:51:44 -0700 |
parents | 3962503cd1e8 |
children | 4504d4cc2044 66ff8d3865b3 |
files | hgext/fix.py tests/test-fix.t |
diffstat | 2 files changed, 40 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/fix.py Thu Aug 26 21:40:21 2021 -0700 +++ b/hgext/fix.py Fri Aug 27 13:51:44 2021 -0700 @@ -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])
--- a/tests/test-fix.t Thu Aug 26 21:40:21 2021 -0700 +++ b/tests/test-fix.t Fri Aug 27 13:51:44 2021 -0700 @@ -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.