diff options
author | Benjamin Peterson <benjamin@python.org> | 2014-04-01 23:18:48 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2014-04-01 23:18:48 (GMT) |
commit | 9dc203fff90c04baf3b9e4410ceba4a25d893b3c (patch) | |
tree | 43e327886fc441f098ff1ddffaa132a2a5dee255 /Lib/os.py | |
parent | 78c85384614dd7dc8fc3f9316874ac8ee9310c13 (diff) | |
parent | 4717e2112b80eae8466bf06e2523042537d54000 (diff) | |
download | cpython-9dc203fff90c04baf3b9e4410ceba4a25d893b3c.zip cpython-9dc203fff90c04baf3b9e4410ceba4a25d893b3c.tar.gz cpython-9dc203fff90c04baf3b9e4410ceba4a25d893b3c.tar.bz2 |
merge 3.3 (#21082)
Diffstat (limited to 'Lib/os.py')
-rw-r--r-- | Lib/os.py | 30 |
1 files changed, 5 insertions, 25 deletions
@@ -206,23 +206,16 @@ SEEK_SET = 0 SEEK_CUR = 1 SEEK_END = 2 - -def _get_masked_mode(mode): - mask = umask(0) - umask(mask) - return mode & ~mask - # Super directory utilities. # (Inspired by Eric Raymond; the doc strings are mostly his) def makedirs(name, mode=0o777, exist_ok=False): """makedirs(name [, mode=0o777][, exist_ok=False]) - Super-mkdir; create a leaf directory and all intermediate ones. - Works like mkdir, except that any intermediate path segment (not - just the rightmost) will be created if it does not exist. If the - target directory with the same mode as we specified already exists, - raises an OSError if exist_ok is False, otherwise no exception is + Super-mkdir; create a leaf directory and all intermediate ones. Works like + mkdir, except that any intermediate path segment (not just the rightmost) + will be created if it does not exist. If the target directory already + exists, raise an OSError if exist_ok is False. Otherwise no exception is raised. This is recursive. """ @@ -243,20 +236,7 @@ def makedirs(name, mode=0o777, exist_ok=False): try: mkdir(name, mode) except OSError as e: - dir_exists = path.isdir(name) - expected_mode = _get_masked_mode(mode) - if dir_exists: - # S_ISGID is automatically copied by the OS from parent to child - # directories on mkdir. Don't consider it being set to be a mode - # mismatch as mkdir does not unset it when not specified in mode. - actual_mode = st.S_IMODE(lstat(name).st_mode) & ~st.S_ISGID - else: - actual_mode = -1 - if not (e.errno == errno.EEXIST and exist_ok and dir_exists and - actual_mode == expected_mode): - if dir_exists and actual_mode != expected_mode: - e.strerror += ' (mode %o != expected mode %o)' % ( - actual_mode, expected_mode) + if not exist_ok or e.errno != errno.EEXIST or not path.isdir(name): raise def removedirs(name): |