changeset 35293:1b03407e808d

merge: skip subrepo state, update hooks, and updating the dirstate in IMM Differential Revision: https://phab.mercurial-scm.org/D1215
author Phil Cohen <phillco@fb.com>
date Fri, 01 Dec 2017 00:07:23 -0800
parents 46510597d266
children 3ceebf497057
files mercurial/merge.py
diffstat 1 files changed, 5 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/merge.py	Fri Dec 01 00:07:23 2017 -0800
+++ b/mercurial/merge.py	Fri Dec 01 00:07:23 2017 -0800
@@ -1839,8 +1839,9 @@
             if not force and (wc.files() or wc.deleted()):
                 raise error.Abort(_("uncommitted changes"),
                                  hint=_("use 'hg status' to list changes"))
-            for s in sorted(wc.substate):
-                wc.sub(s).bailifchanged()
+            if not wc.isinmemory():
+                for s in sorted(wc.substate):
+                    wc.sub(s).bailifchanged()
 
         elif not overwrite:
             if p1 == p2: # no-op update
@@ -1955,7 +1956,7 @@
         ### apply phase
         if not branchmerge: # just jump to the new rev
             fp1, fp2, xp1, xp2 = fp2, nullid, xp2, ''
-        if not partial:
+        if not partial and not wc.isinmemory():
             repo.hook('preupdate', throw=True, parent1=xp1, parent2=xp2)
             # note that we're in the middle of an update
             repo.vfs.write('updatestate', p2.hex())
@@ -1994,7 +1995,7 @@
 
         stats = applyupdates(repo, actions, wc, p2, overwrite, labels=labels)
 
-        if not partial:
+        if not partial and not wc.isinmemory():
             with repo.dirstate.parentchange():
                 repo.setparents(fp1, fp2)
                 recordupdates(repo, actions, branchmerge)