Merged revisions 85689 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r85689 | hirokazu.yamamoto | 2010-10-18 21:13:18 +0900 | 3 lines Issue #5117: Case normalization was needed on ntpath.relpath(). And fixed root directory issue on posixpath.relpath(). (Ported working fixes from ntpath) ........
This commit is contained in:
parent
fd6a55ec41
commit
089144e511
|
@ -600,7 +600,7 @@ def relpath(path, start=curdir):
|
||||||
path_abs = abspath(normpath(path))
|
path_abs = abspath(normpath(path))
|
||||||
start_drive, start_rest = splitdrive(start_abs)
|
start_drive, start_rest = splitdrive(start_abs)
|
||||||
path_drive, path_rest = splitdrive(path_abs)
|
path_drive, path_rest = splitdrive(path_abs)
|
||||||
if start_drive != path_drive:
|
if normcase(start_drive) != normcase(path_drive):
|
||||||
error = "path is on mount '{0}', start on mount '{1}'".format(
|
error = "path is on mount '{0}', start on mount '{1}'".format(
|
||||||
path_drive, start_drive)
|
path_drive, start_drive)
|
||||||
raise ValueError(error)
|
raise ValueError(error)
|
||||||
|
@ -610,7 +610,7 @@ def relpath(path, start=curdir):
|
||||||
# Work out how much of the filepath is shared by start and path.
|
# Work out how much of the filepath is shared by start and path.
|
||||||
i = 0
|
i = 0
|
||||||
for e1, e2 in zip(start_list, path_list):
|
for e1, e2 in zip(start_list, path_list):
|
||||||
if e1 != e2:
|
if normcase(e1) != normcase(e2):
|
||||||
break
|
break
|
||||||
i += 1
|
i += 1
|
||||||
|
|
||||||
|
|
|
@ -444,8 +444,8 @@ def relpath(path, start=None):
|
||||||
if start is None:
|
if start is None:
|
||||||
start = curdir
|
start = curdir
|
||||||
|
|
||||||
start_list = abspath(start).split(sep)
|
start_list = [x for x in abspath(start).split(sep) if x]
|
||||||
path_list = abspath(path).split(sep)
|
path_list = [x for x in abspath(path).split(sep) if x]
|
||||||
|
|
||||||
# Work out how much of the filepath is shared by start and path.
|
# Work out how much of the filepath is shared by start and path.
|
||||||
i = len(commonprefix([start_list, path_list]))
|
i = len(commonprefix([start_list, path_list]))
|
||||||
|
|
|
@ -236,6 +236,7 @@ class TestNtpath(unittest.TestCase):
|
||||||
tester('ntpath.relpath("/", "/")', '.')
|
tester('ntpath.relpath("/", "/")', '.')
|
||||||
tester('ntpath.relpath("/a", "/a")', '.')
|
tester('ntpath.relpath("/a", "/a")', '.')
|
||||||
tester('ntpath.relpath("/a/b", "/a/b")', '.')
|
tester('ntpath.relpath("/a/b", "/a/b")', '.')
|
||||||
|
tester('ntpath.relpath("c:/foo", "C:/FOO")', '.')
|
||||||
|
|
||||||
|
|
||||||
def test_main():
|
def test_main():
|
||||||
|
|
|
@ -602,6 +602,15 @@ class PosixPathTest(unittest.TestCase):
|
||||||
"../"+curdir+"/a/b")
|
"../"+curdir+"/a/b")
|
||||||
self.assertEqual(posixpath.relpath("a", "b/c"), "../../a")
|
self.assertEqual(posixpath.relpath("a", "b/c"), "../../a")
|
||||||
self.assertEqual(posixpath.relpath("a", "a"), ".")
|
self.assertEqual(posixpath.relpath("a", "a"), ".")
|
||||||
|
self.assertEqual(posixpath.relpath("/foo/bar/bat", "/x/y/z"), '../../../foo/bar/bat')
|
||||||
|
self.assertEqual(posixpath.relpath("/foo/bar/bat", "/foo/bar"), 'bat')
|
||||||
|
self.assertEqual(posixpath.relpath("/foo/bar/bat", "/"), 'foo/bar/bat')
|
||||||
|
self.assertEqual(posixpath.relpath("/", "/foo/bar/bat"), '../../..')
|
||||||
|
self.assertEqual(posixpath.relpath("/foo/bar/bat", "/x"), '../foo/bar/bat')
|
||||||
|
self.assertEqual(posixpath.relpath("/x", "/foo/bar/bat"), '../../../x')
|
||||||
|
self.assertEqual(posixpath.relpath("/", "/"), '.')
|
||||||
|
self.assertEqual(posixpath.relpath("/a", "/a"), '.')
|
||||||
|
self.assertEqual(posixpath.relpath("/a/b", "/a/b"), '.')
|
||||||
finally:
|
finally:
|
||||||
os.getcwd = real_getcwd
|
os.getcwd = real_getcwd
|
||||||
|
|
||||||
|
@ -620,6 +629,15 @@ class PosixPathTest(unittest.TestCase):
|
||||||
b"../"+curdir+b"/a/b")
|
b"../"+curdir+b"/a/b")
|
||||||
self.assertEqual(posixpath.relpath(b"a", b"b/c"), b"../../a")
|
self.assertEqual(posixpath.relpath(b"a", b"b/c"), b"../../a")
|
||||||
self.assertEqual(posixpath.relpath(b"a", b"a"), b".")
|
self.assertEqual(posixpath.relpath(b"a", b"a"), b".")
|
||||||
|
self.assertEqual(posixpath.relpath(b"/foo/bar/bat", b"/x/y/z"), b'../../../foo/bar/bat')
|
||||||
|
self.assertEqual(posixpath.relpath(b"/foo/bar/bat", b"/foo/bar"), b'bat')
|
||||||
|
self.assertEqual(posixpath.relpath(b"/foo/bar/bat", b"/"), b'foo/bar/bat')
|
||||||
|
self.assertEqual(posixpath.relpath(b"/", b"/foo/bar/bat"), b'../../..')
|
||||||
|
self.assertEqual(posixpath.relpath(b"/foo/bar/bat", b"/x"), b'../foo/bar/bat')
|
||||||
|
self.assertEqual(posixpath.relpath(b"/x", b"/foo/bar/bat"), b'../../../x')
|
||||||
|
self.assertEqual(posixpath.relpath(b"/", b"/"), b'.')
|
||||||
|
self.assertEqual(posixpath.relpath(b"/a", b"/a"), b'.')
|
||||||
|
self.assertEqual(posixpath.relpath(b"/a/b", b"/a/b"), b'.')
|
||||||
|
|
||||||
self.assertRaises(TypeError, posixpath.relpath, b"bytes", "str")
|
self.assertRaises(TypeError, posixpath.relpath, b"bytes", "str")
|
||||||
self.assertRaises(TypeError, posixpath.relpath, "str", b"bytes")
|
self.assertRaises(TypeError, posixpath.relpath, "str", b"bytes")
|
||||||
|
|
|
@ -128,6 +128,10 @@ C-API
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #5117: Case normalization was needed on ntpath.relpath(). And
|
||||||
|
fixed root directory issue on posixpath.relpath(). (Ported working fixes
|
||||||
|
from ntpath)
|
||||||
|
|
||||||
- Issue #10041: The signature of optional arguments in socket.makefile()
|
- Issue #10041: The signature of optional arguments in socket.makefile()
|
||||||
didn't match that of io.open(), and they also didn't get forwarded
|
didn't match that of io.open(), and they also didn't get forwarded
|
||||||
properly to TextIOWrapper in text mode. Patch by Kai Zhu.
|
properly to TextIOWrapper in text mode. Patch by Kai Zhu.
|
||||||
|
|
Loading…
Reference in New Issue