Show More
@@ -306,8 +306,7 b' class vfs(abstractvfs):' | |||||
306 | # to a directory. Let the posixfile() call below raise IOError. |
|
306 | # to a directory. Let the posixfile() call below raise IOError. | |
307 | if basename: |
|
307 | if basename: | |
308 | if atomictemp: |
|
308 | if atomictemp: | |
309 |
|
|
309 | util.ensuredirs(dirname, self.createmode) | |
310 | util.ensuredirs(dirname, self.createmode) |
|
|||
311 | return util.atomictempfile(f, mode, self.createmode) |
|
310 | return util.atomictempfile(f, mode, self.createmode) | |
312 | try: |
|
311 | try: | |
313 | if 'w' in mode: |
|
312 | if 'w' in mode: | |
@@ -325,8 +324,7 b' class vfs(abstractvfs):' | |||||
325 | if e.errno != errno.ENOENT: |
|
324 | if e.errno != errno.ENOENT: | |
326 | raise |
|
325 | raise | |
327 | nlink = 0 |
|
326 | nlink = 0 | |
328 |
|
|
327 | util.ensuredirs(dirname, self.createmode) | |
329 | util.ensuredirs(dirname, self.createmode) |
|
|||
330 | if nlink > 0: |
|
328 | if nlink > 0: | |
331 | if self._trustnlink is None: |
|
329 | if self._trustnlink is None: | |
332 | self._trustnlink = nlink > 1 or util.checknlink(f) |
|
330 | self._trustnlink = nlink > 1 or util.checknlink(f) | |
@@ -345,9 +343,7 b' class vfs(abstractvfs):' | |||||
345 | except OSError: |
|
343 | except OSError: | |
346 | pass |
|
344 | pass | |
347 |
|
345 | |||
348 |
|
|
346 | util.ensuredirs(os.path.dirname(linkname), self.createmode) | |
349 | if not os.path.exists(dirname): |
|
|||
350 | util.ensuredirs(dirname, self.createmode) |
|
|||
351 |
|
347 | |||
352 | if self._cansymlink: |
|
348 | if self._cansymlink: | |
353 | try: |
|
349 | try: |
@@ -882,13 +882,20 b' def makedirs(name, mode=None):' | |||||
882 |
|
882 | |||
883 | def ensuredirs(name, mode=None): |
|
883 | def ensuredirs(name, mode=None): | |
884 | """race-safe recursive directory creation""" |
|
884 | """race-safe recursive directory creation""" | |
|
885 | if os.path.isdir(name): | |||
|
886 | return | |||
|
887 | parent = os.path.dirname(os.path.abspath(name)) | |||
|
888 | if parent != name: | |||
|
889 | ensuredirs(parent, mode) | |||
885 | try: |
|
890 | try: | |
886 |
m |
|
891 | os.mkdir(name) | |
887 | except OSError, err: |
|
892 | except OSError, err: | |
888 | if err.errno == errno.EEXIST and os.path.isdir(name): |
|
893 | if err.errno == errno.EEXIST and os.path.isdir(name): | |
889 | # someone else seems to have won a directory creation race |
|
894 | # someone else seems to have won a directory creation race | |
890 | return |
|
895 | return | |
891 | raise |
|
896 | raise | |
|
897 | if mode is not None: | |||
|
898 | os.chmod(name, mode) | |||
892 |
|
899 | |||
893 | def readfile(path): |
|
900 | def readfile(path): | |
894 | fp = open(path, 'rb') |
|
901 | fp = open(path, 'rb') |
General Comments 0
You need to be logged in to leave comments.
Login now