diff options
author | Tim Golden <mail@timgolden.me.uk> | 2013-08-01 12:44:00 +0100 |
---|---|---|
committer | Tim Golden <mail@timgolden.me.uk> | 2013-08-01 12:44:00 +0100 |
commit | 6b528067c50b9dbf1c53fbc8b6fa959050c5dfcd (patch) | |
tree | 523ab53f48183089526e9f3cdd6737fbc7f62027 /Lib/ntpath.py | |
parent | 536ffe161c014f3646cbf52bc527f2ba9ebd6478 (diff) | |
download | cpython-git-6b528067c50b9dbf1c53fbc8b6fa959050c5dfcd.tar.gz |
Issue #9035: os.path.ismount now recognises volumes mounted below
a drive root on Windows. Original patch by Atsuo Ishimoto.
Diffstat (limited to 'Lib/ntpath.py')
-rw-r--r-- | Lib/ntpath.py | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/Lib/ntpath.py b/Lib/ntpath.py index d81f7285ae..6b656976a4 100644 --- a/Lib/ntpath.py +++ b/Lib/ntpath.py @@ -335,16 +335,35 @@ def lexists(path): return False return True -# Is a path a mount point? Either a root (with or without drive letter) -# or an UNC path with at most a / or \ after the mount point. - +# Is a path a mount point? +# Any drive letter root (eg c:\) +# Any share UNC (eg \\server\share) +# Any volume mounted on a filesystem folder +# +# No one method detects all three situations. Historically we've lexically +# detected drive letter roots and share UNCs. The canonical approach to +# detecting mounted volumes (querying the reparse tag) fails for the most +# common case: drive letter roots. The alternative which uses GetVolumePathName +# fails if the drive letter is the result of a SUBST. +try: + from nt import _getvolumepathname +except ImportError: + _getvolumepathname = None def ismount(path): - """Test whether a path is a mount point (defined as root of drive)""" + """Test whether a path is a mount point (a drive root, the root of a + share, or a mounted volume)""" seps = _get_bothseps(path) + path = abspath(path) root, rest = splitdrive(path) if root and root[0] in seps: return (not rest) or (rest in seps) - return rest in seps + if rest in seps: + return True + + if _getvolumepathname: + return path.rstrip(seps) == _getvolumepathname(path).rstrip(seps) + else: + return False # Expand paths beginning with '~' or '~user'. |