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
--- 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)
--- 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
--- 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