Mercurial > public > mercurial-scm > hg
diff mercurial/util.py @ 18678:423eee0b0b14
util: make ensuredirs safer against races
author | Bryan O'Sullivan <bryano@fb.com> |
---|---|
date | Wed, 13 Feb 2013 12:20:10 -0800 |
parents | 4034b8d551b1 |
children | 716cad930691 |
line wrap: on
line diff
--- a/mercurial/util.py Wed Feb 13 11:07:01 2013 -0800 +++ b/mercurial/util.py Wed Feb 13 12:20:10 2013 -0800 @@ -882,13 +882,20 @@ def ensuredirs(name, mode=None): """race-safe recursive directory creation""" + if os.path.isdir(name): + return + parent = os.path.dirname(os.path.abspath(name)) + if parent != name: + ensuredirs(parent, mode) try: - makedirs(name, mode) + os.mkdir(name) except OSError, err: if err.errno == errno.EEXIST and os.path.isdir(name): # someone else seems to have won a directory creation race return raise + if mode is not None: + os.chmod(name, mode) def readfile(path): fp = open(path, 'rb')