Show More
@@ -539,7 +539,7 b' class vfs(abstractvfs):' | |||||
539 | # to a directory. Let the posixfile() call below raise IOError. |
|
539 | # to a directory. Let the posixfile() call below raise IOError. | |
540 | if basename: |
|
540 | if basename: | |
541 | if atomictemp: |
|
541 | if atomictemp: | |
542 |
util. |
|
542 | util.makedirs(dirname, self.createmode, notindexed) | |
543 | return util.atomictempfile(f, mode, self.createmode) |
|
543 | return util.atomictempfile(f, mode, self.createmode) | |
544 | try: |
|
544 | try: | |
545 | if 'w' in mode: |
|
545 | if 'w' in mode: | |
@@ -556,7 +556,7 b' class vfs(abstractvfs):' | |||||
556 | if e.errno != errno.ENOENT: |
|
556 | if e.errno != errno.ENOENT: | |
557 | raise |
|
557 | raise | |
558 | nlink = 0 |
|
558 | nlink = 0 | |
559 |
util. |
|
559 | util.makedirs(dirname, self.createmode, notindexed) | |
560 | if nlink > 0: |
|
560 | if nlink > 0: | |
561 | if self._trustnlink is None: |
|
561 | if self._trustnlink is None: | |
562 | self._trustnlink = nlink > 1 or util.checknlink(f) |
|
562 | self._trustnlink = nlink > 1 or util.checknlink(f) | |
@@ -583,7 +583,7 b' class vfs(abstractvfs):' | |||||
583 | except OSError: |
|
583 | except OSError: | |
584 | pass |
|
584 | pass | |
585 |
|
585 | |||
586 |
util. |
|
586 | util.makedirs(os.path.dirname(linkname), self.createmode) | |
587 |
|
587 | |||
588 | if self._cansymlink: |
|
588 | if self._cansymlink: | |
589 | try: |
|
589 | try: |
@@ -1420,7 +1420,12 b' class atomictempfile(object):' | |||||
1420 | self.discard() |
|
1420 | self.discard() | |
1421 |
|
1421 | |||
1422 | def makedirs(name, mode=None, notindexed=False): |
|
1422 | def makedirs(name, mode=None, notindexed=False): | |
1423 |
"""recursive directory creation with parent mode inheritance |
|
1423 | """recursive directory creation with parent mode inheritance | |
|
1424 | ||||
|
1425 | Newly created directories are marked as "not to be indexed by | |||
|
1426 | the content indexing service", if ``notindexed`` is specified | |||
|
1427 | for "write" mode access. | |||
|
1428 | """ | |||
1424 | try: |
|
1429 | try: | |
1425 | makedir(name, notindexed) |
|
1430 | makedir(name, notindexed) | |
1426 | except OSError as err: |
|
1431 | except OSError as err: | |
@@ -1432,29 +1437,13 b' def makedirs(name, mode=None, notindexed' | |||||
1432 | if parent == name: |
|
1437 | if parent == name: | |
1433 | raise |
|
1438 | raise | |
1434 | makedirs(parent, mode, notindexed) |
|
1439 | makedirs(parent, mode, notindexed) | |
1435 | makedir(name, notindexed) |
|
1440 | try: | |
1436 | if mode is not None: |
|
1441 | makedir(name, notindexed) | |
1437 | os.chmod(name, mode) |
|
1442 | except OSError as err: | |
1438 |
|
1443 | # Catch EEXIST to handle races | ||
1439 | def ensuredirs(name, mode=None, notindexed=False): |
|
1444 | if err.errno == errno.EEXIST: | |
1440 | """race-safe recursive directory creation |
|
1445 | return | |
1441 |
|
1446 | raise | ||
1442 | Newly created directories are marked as "not to be indexed by |
|
|||
1443 | the content indexing service", if ``notindexed`` is specified |
|
|||
1444 | for "write" mode access. |
|
|||
1445 | """ |
|
|||
1446 | if os.path.isdir(name): |
|
|||
1447 | return |
|
|||
1448 | parent = os.path.dirname(os.path.abspath(name)) |
|
|||
1449 | if parent != name: |
|
|||
1450 | ensuredirs(parent, mode, notindexed) |
|
|||
1451 | try: |
|
|||
1452 | makedir(name, notindexed) |
|
|||
1453 | except OSError as err: |
|
|||
1454 | if err.errno == errno.EEXIST and os.path.isdir(name): |
|
|||
1455 | # someone else seems to have won a directory creation race |
|
|||
1456 | return |
|
|||
1457 | raise |
|
|||
1458 | if mode is not None: |
|
1447 | if mode is not None: | |
1459 | os.chmod(name, mode) |
|
1448 | os.chmod(name, mode) | |
1460 |
|
1449 |
General Comments 0
You need to be logged in to leave comments.
Login now