D7901: merge: introduce a revert_to() for that use-case
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Thu Jan 16 01:22:52 UTC 2020
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
I find it hard to understand what value to pass for all the arguments
to `merge.update()`. I would like to introduce functions that are more
specific to each use-case. We already have `graft()`. This patch
introduces a `revert_to()` and uses it in some places to show that it
works.
REPOSITORY
rHG Mercurial
BRANCH
default
REVISION DETAIL
https://phab.mercurial-scm.org/D7901
AFFECTED FILES
hgext/fix.py
mercurial/cmdutil.py
mercurial/merge.py
CHANGE DETAILS
diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -2205,6 +2205,7 @@
labels=None,
matcher=None,
mergeforce=False,
+ updatedirstate=True,
updatecheck=None,
wc=None,
):
@@ -2504,7 +2505,7 @@
### apply phase
if not branchmerge: # just jump to the new rev
fp1, fp2, xp1, xp2 = fp2, nullid, xp2, b''
- updatedirstate = always and not wc.isinmemory()
+ updatedirstate = updatedirstate and always and not wc.isinmemory()
if updatedirstate:
repo.hook(b'preupdate', throw=True, parent1=xp1, parent2=xp2)
# note that we're in the middle of an update
@@ -2578,6 +2579,18 @@
return stats
+def revert_to(ctx, matcher=None, wc=None):
+ return update(
+ ctx.repo(),
+ ctx.rev(),
+ branchmerge=False,
+ force=True,
+ updatedirstate=False,
+ matcher=matcher,
+ wc=wc,
+ )
+
+
def graft(
repo, ctx, base, labels=None, keepparent=False, keepconflictparent=False
):
diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -584,15 +584,8 @@
[os.unlink(repo.wjoin(c)) for c in newlyaddedandmodifiedfiles]
# 3a. apply filtered patch to clean repo (clean)
if backups:
- # Equivalent to hg.revert
m = scmutil.matchfiles(repo, set(backups.keys()) | alsorestore)
- mergemod.update(
- repo,
- repo.dirstate.p1(),
- branchmerge=False,
- force=True,
- matcher=m,
- )
+ mergemod.revert_to(repo[b'.'], matcher=m)
# 3b. (apply)
if dopatch:
diff --git a/hgext/fix.py b/hgext/fix.py
--- a/hgext/fix.py
+++ b/hgext/fix.py
@@ -735,15 +735,7 @@
wctx = context.overlayworkingctx(repo)
wctx.setbase(repo[newp1node])
- merge.update(
- repo,
- ctx.rev(),
- branchmerge=False,
- force=True,
- ancestor=p1rev,
- mergeancestor=False,
- wc=wctx,
- )
+ merge.revert_to(ctx, wc=wctx)
copies.graftcopies(wctx, ctx, ctx.p1())
for path in filedata.keys():
To: martinvonz, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list