diff --git a/mercurial/posix.py b/mercurial/posix.py --- a/mercurial/posix.py +++ b/mercurial/posix.py @@ -16,6 +16,7 @@ samestat = os.path.samestat oslink = os.link unlink = os.unlink rename = os.rename +removedirs = os.removedirs expandglobs = False umask = os.umask(0) diff --git a/mercurial/util.py b/mercurial/util.py --- a/mercurial/util.py +++ b/mercurial/util.py @@ -59,6 +59,7 @@ posixfile = platform.posixfile quotecommand = platform.quotecommand readpipe = platform.readpipe rename = platform.rename +removedirs = platform.removedirs samedevice = platform.samedevice samefile = platform.samefile samestat = platform.samestat diff --git a/mercurial/windows.py b/mercurial/windows.py --- a/mercurial/windows.py +++ b/mercurial/windows.py @@ -270,7 +270,7 @@ def groupname(gid=None): If gid is None, return the name of the current group.""" return None -def _removedirs(name): +def removedirs(name): """special version of os.removedirs that does not remove symlinked directories or junction points if they actually contain files""" if osutil.listdir(name): @@ -297,7 +297,7 @@ def unlinkpath(f, ignoremissing=False): raise # try removing directories that might now be empty try: - _removedirs(os.path.dirname(f)) + removedirs(os.path.dirname(f)) except OSError: pass