Comments
Patch
@@ -1152,9 +1152,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
@@ -1968,6 +1968,19 @@
self._repo.wwrite(self._path, data, flags,
backgroundclose=backgroundclose)
+ def clearunknown(self):
+ """Removes conflicting items in the working directory (and creates any
+ missing parent directories) so that ``write()`` can be called
+ successfully.
+ """
+ if self._repo.wvfs.isdir(self._path) and not self._repo.wvfs.islink(
+ self._path):
+ self._repo.wvfs.removedirs(self._path)
+
+ dirname = os.path.dirname(self._path)
+ if not self._repo.wvfs.isdir(dirname):
+ self._repo.wvfs.makedirs(dirname)
+
def setflags(self, l, x):
self._repo.wvfs.setflags(self._path, l, x)