Comments
Patch
@@ -539,7 +539,7 @@
# to a directory. Let the posixfile() call below raise IOError.
if basename:
if atomictemp:
- util.ensuredirs(dirname, self.createmode, notindexed)
+ util.makedirs(dirname, self.createmode, notindexed)
return util.atomictempfile(f, mode, self.createmode)
try:
if 'w' in mode:
@@ -556,7 +556,7 @@
if e.errno != errno.ENOENT:
raise
nlink = 0
- util.ensuredirs(dirname, self.createmode, notindexed)
+ util.makedirs(dirname, self.createmode, notindexed)
if nlink > 0:
if self._trustnlink is None:
self._trustnlink = nlink > 1 or util.checknlink(f)
@@ -583,7 +583,7 @@
except OSError:
pass
- util.ensuredirs(os.path.dirname(linkname), self.createmode)
+ util.makedirs(os.path.dirname(linkname), self.createmode)
if self._cansymlink:
try:
@@ -1420,7 +1420,12 @@
self.discard()
def makedirs(name, mode=None, notindexed=False):
- """recursive directory creation with parent mode inheritance"""
+ """recursive directory creation with parent mode inheritance
+
+ Newly created directories are marked as "not to be indexed by
+ the content indexing service", if ``notindexed`` is specified
+ for "write" mode access.
+ """
try:
makedir(name, notindexed)
except OSError as err:
@@ -1432,29 +1437,13 @@
if parent == name:
raise
makedirs(parent, mode, notindexed)
- makedir(name, notindexed)
- if mode is not None:
- os.chmod(name, mode)
-
-def ensuredirs(name, mode=None, notindexed=False):
- """race-safe recursive directory creation
-
- Newly created directories are marked as "not to be indexed by
- the content indexing service", if ``notindexed`` is specified
- for "write" mode access.
- """
- if os.path.isdir(name):
- return
- parent = os.path.dirname(os.path.abspath(name))
- if parent != name:
- ensuredirs(parent, mode, notindexed)
- try:
- makedir(name, notindexed)
- except OSError as err:
- if err.errno == errno.EEXIST and os.path.isdir(name):
- # someone else seems to have won a directory creation race
- return
- raise
+ try:
+ makedir(name, notindexed)
+ except OSError as err:
+ # Catch EEXIST to handle races
+ if err.errno == errno.EEXIST:
+ return
+ raise
if mode is not None:
os.chmod(name, mode)