# HG changeset patch # User FUJIWARA Katsunori # Date 1428680829 -32400 # Node ID 144883a8d0d48b82e12024d067a07f23f5dd6587 # Parent def1145cec2d4d674a530b377375e6d719979a5a util: add removedirs as platform depending function According to fa901423ac23 introducing "windows._removedirs()": If a hg repository including working directory is a reparse point (directory symlinked or a junction point), then using os.removedirs will remove the reparse point erroneously. "windows._removedirs()" should be used instead of "os.removedirs()" on Windows. This patch adds "removedirs" as platform depending function to replace "os.removedirs()" invocations for portability and safety diff -r def1145cec2d -r 144883a8d0d4 mercurial/posix.py --- a/mercurial/posix.py Sat Apr 11 00:47:09 2015 +0900 +++ b/mercurial/posix.py Sat Apr 11 00:47:09 2015 +0900 @@ -16,6 +16,7 @@ oslink = os.link unlink = os.unlink rename = os.rename +removedirs = os.removedirs expandglobs = False umask = os.umask(0) diff -r def1145cec2d -r 144883a8d0d4 mercurial/util.py --- a/mercurial/util.py Sat Apr 11 00:47:09 2015 +0900 +++ b/mercurial/util.py Sat Apr 11 00:47:09 2015 +0900 @@ -59,6 +59,7 @@ quotecommand = platform.quotecommand readpipe = platform.readpipe rename = platform.rename +removedirs = platform.removedirs samedevice = platform.samedevice samefile = platform.samefile samestat = platform.samestat diff -r def1145cec2d -r 144883a8d0d4 mercurial/windows.py --- a/mercurial/windows.py Sat Apr 11 00:47:09 2015 +0900 +++ b/mercurial/windows.py Sat Apr 11 00:47:09 2015 +0900 @@ -270,7 +270,7 @@ 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 @@ raise # try removing directories that might now be empty try: - _removedirs(os.path.dirname(f)) + removedirs(os.path.dirname(f)) except OSError: pass