changeset 44317:f546d2170b0f

merge: introduce a clean_update() for that use-case 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 `clean_update()` and uses it in some places to show that it works. Differential Revision: https://phab.mercurial-scm.org/D7902
author Martin von Zweigbergk <martinvonz@google.com>
date Wed, 15 Jan 2020 15:30:25 -0800
parents 48a1a974a92c
children c791ed6a2154
files hgext/histedit.py hgext/rebase.py mercurial/hg.py mercurial/merge.py mercurial/shelve.py
diffstat 5 files changed, 14 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/histedit.py	Wed Feb 05 16:16:15 2020 -0500
+++ b/hgext/histedit.py	Wed Jan 15 15:30:25 2020 -0800
@@ -945,7 +945,7 @@
 class base(histeditaction):
     def run(self):
         if self.repo[b'.'].node() != self.node:
-            mergemod.update(self.repo, self.node, branchmerge=False, force=True)
+            mergemod.clean_update(self.repo[self.node])
         return self.continueclean()
 
     def continuedirty(self):
--- a/hgext/rebase.py	Wed Feb 05 16:16:15 2020 -0500
+++ b/hgext/rebase.py	Wed Jan 15 15:30:25 2020 -0800
@@ -800,9 +800,7 @@
 
                 # Update away from the rebase if necessary
                 if shouldupdate:
-                    mergemod.update(
-                        repo, self.originalwd, branchmerge=False, force=True
-                    )
+                    mergemod.clean_update(repo[self.originalwd])
 
                 # Strip from the first rebased revision
                 if rebased:
@@ -1477,7 +1475,7 @@
     else:
         if repo[b'.'].rev() != p1:
             repo.ui.debug(b" update to %d:%s\n" % (p1, p1ctx))
-            mergemod.update(repo, p1, branchmerge=False, force=True)
+            mergemod.clean_update(p1ctx)
         else:
             repo.ui.debug(b" already in destination\n")
         # This is, alas, necessary to invalidate workingctx's manifest cache,
--- a/mercurial/hg.py	Wed Feb 05 16:16:15 2020 -0500
+++ b/mercurial/hg.py	Wed Jan 15 15:30:25 2020 -0800
@@ -1173,7 +1173,7 @@
         node = repo[b'.'].hex()
 
     repo.ui.status(_(b"aborting the merge, updating back to %s\n") % node[:12])
-    stats = mergemod.update(repo, node, branchmerge=False, force=True)
+    stats = mergemod.clean_update(repo[node])
     assert stats.unresolvedcount == 0
     _showstats(repo, stats)
 
--- a/mercurial/merge.py	Wed Feb 05 16:16:15 2020 -0500
+++ b/mercurial/merge.py	Wed Jan 15 15:30:25 2020 -0800
@@ -2597,6 +2597,15 @@
     return stats
 
 
+def clean_update(ctx, wc=None):
+    """Do a clean update to the given commit.
+
+    This involves updating to the commit and discarding any changes in the
+    working copy.
+    """
+    return update(ctx.repo(), ctx.rev(), branchmerge=False, force=True, wc=wc)
+
+
 def graft(
     repo,
     ctx,
--- a/mercurial/shelve.py	Wed Feb 05 16:16:15 2020 -0500
+++ b/mercurial/shelve.py	Wed Jan 15 15:30:25 2020 -0800
@@ -745,7 +745,7 @@
         try:
             checkparents(repo, state)
 
-            merge.update(repo, state.pendingctx, branchmerge=False, force=True)
+            merge.clean_update(state.pendingctx)
             if state.activebookmark and state.activebookmark in repo._bookmarks:
                 bookmarks.activate(repo, state.activebookmark)
             mergefiles(ui, repo, state.wctx, state.pendingctx)