mercurial/merge.py
changeset 44271 c791ed6a2154
parent 44270 f546d2170b0f
child 44287 e76d98546bd2
--- a/mercurial/merge.py	Wed Jan 15 15:30:25 2020 -0800
+++ b/mercurial/merge.py	Wed Jan 15 14:47:38 2020 -0800
@@ -2225,6 +2225,7 @@
     labels=None,
     matcher=None,
     mergeforce=False,
+    updatedirstate=True,
     updatecheck=None,
     wc=None,
 ):
@@ -2523,7 +2524,7 @@
         # If we're doing a partial update, we need to skip updating
         # the dirstate.
         always = matcher is None or matcher.always()
-        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
@@ -2606,6 +2607,24 @@
     return update(ctx.repo(), ctx.rev(), branchmerge=False, force=True, wc=wc)
 
 
+def revert_to(ctx, matcher=None, wc=None):
+    """Revert the working copy to the given commit.
+
+    The working copy will keep its current parent(s) but its content will
+    be the same as in the given commit.
+    """
+
+    return update(
+        ctx.repo(),
+        ctx.rev(),
+        branchmerge=False,
+        force=True,
+        updatedirstate=False,
+        matcher=matcher,
+        wc=wc,
+    )
+
+
 def graft(
     repo,
     ctx,