Mercurial > hg-stable
diff mercurial/vfs.py @ 40825:03bca908d9fb
vfs: add option to not create parent directories implicitly
In blackbox, we don't want to create a ".hg" directory by mistake. This
provides a race-safe option to achieve that.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Tue, 20 Nov 2018 22:31:12 +0900 |
parents | 34f15db81cf0 |
children | e10adebf8176 |
line wrap: on
line diff
--- a/mercurial/vfs.py Thu Nov 15 02:55:33 2018 +0100 +++ b/mercurial/vfs.py Tue Nov 20 22:31:12 2018 +0900 @@ -345,12 +345,14 @@ self.audit(path, mode=mode) def __call__(self, path, mode="r", atomictemp=False, notindexed=False, - backgroundclose=False, checkambig=False, auditpath=True): + backgroundclose=False, checkambig=False, auditpath=True, + makeparentdirs=True): '''Open ``path`` file, which is relative to vfs root. - Newly created directories are marked as "not to be indexed by - the content indexing service", if ``notindexed`` is specified - for "write" mode access. + By default, parent directories are created as needed. Newly created + directories are marked as "not to be indexed by the content indexing + service", if ``notindexed`` is specified for "write" mode access. + Set ``makeparentdirs=False`` to not create directories implicitly. If ``backgroundclose`` is passed, the file may be closed asynchronously. It can only be used if the ``self.backgroundclosing()`` context manager @@ -389,7 +391,8 @@ # to a directory. Let the posixfile() call below raise IOError. if basename: if atomictemp: - util.makedirs(dirname, self.createmode, notindexed) + if makeparentdirs: + util.makedirs(dirname, self.createmode, notindexed) return util.atomictempfile(f, mode, self.createmode, checkambig=checkambig) try: @@ -407,7 +410,8 @@ if e.errno != errno.ENOENT: raise nlink = 0 - util.makedirs(dirname, self.createmode, notindexed) + if makeparentdirs: + util.makedirs(dirname, self.createmode, notindexed) if nlink > 0: if self._trustnlink is None: self._trustnlink = nlink > 1 or util.checknlink(f)