merge: move some of the logic in batchget() to workingfilectx
authorPhil Cohen <phillco@fb.com>
Thu, 31 Aug 2017 11:28:59 -0700
changeset 34037 65ae54582713
parent 34036 fe04c018eaac
child 34038 bc2535238de2
merge: move some of the logic in batchget() to workingfilectx We will use this logic in two places with in-memory merge. Differential Revision: https://phab.mercurial-scm.org/D444
mercurial/context.py
mercurial/merge.py
--- a/mercurial/context.py	Thu Aug 31 11:28:59 2017 -0700
+++ b/mercurial/context.py	Thu Aug 31 11:28:59 2017 -0700
@@ -1963,6 +1963,14 @@
         self._repo.wwrite(self._path, data, flags,
                           backgroundclose=backgroundclose)
 
+    def clearunknown(self):
+        """Removes conflicting items in the working directory so that
+        ``write()`` can be called successfully.
+        """
+        wvfs = self._repo.wvfs
+        if wvfs.isdir(self._path) and not wvfs.islink(self._path):
+            wvfs.removedirs(self._path)
+
     def setflags(self, l, x):
         self._repo.wvfs.setflags(self._path, l, x)
 
--- a/mercurial/merge.py	Thu Aug 31 11:28:59 2017 -0700
+++ b/mercurial/merge.py	Thu Aug 31 11:28:59 2017 -0700
@@ -1150,9 +1150,7 @@
                 except OSError as e:
                     if e.errno != errno.ENOENT:
                         raise
-
-            if repo.wvfs.isdir(f) and not repo.wvfs.islink(f):
-                repo.wvfs.removedirs(f)
+            wctx[f].clearunknown()
             wctx[f].write(fctx(f).data(), flags, backgroundclose=True)
             if i == 100:
                 yield i, f