[Python-checkins] r85693 - in python/branches/release31-maint: Lib/ntpath.py Lib/posixpath.py Lib/test/test_ntpath.py Lib/test/test_posixpath.py Misc/NEWS

hirokazu.yamamoto python-checkins at python.org
Mon Oct 18 15:49:10 CEST 2010


Author: hirokazu.yamamoto
Date: Mon Oct 18 15:49:09 2010
New Revision: 85693

Log:
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)
........


Modified:
   python/branches/release31-maint/   (props changed)
   python/branches/release31-maint/Lib/ntpath.py
   python/branches/release31-maint/Lib/posixpath.py
   python/branches/release31-maint/Lib/test/test_ntpath.py
   python/branches/release31-maint/Lib/test/test_posixpath.py
   python/branches/release31-maint/Misc/NEWS

Modified: python/branches/release31-maint/Lib/ntpath.py
==============================================================================
--- python/branches/release31-maint/Lib/ntpath.py	(original)
+++ python/branches/release31-maint/Lib/ntpath.py	Mon Oct 18 15:49:09 2010
@@ -600,7 +600,7 @@
     path_abs = abspath(normpath(path))
     start_drive, start_rest = splitdrive(start_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(
             path_drive, start_drive)
         raise ValueError(error)
@@ -610,7 +610,7 @@
     # Work out how much of the filepath is shared by start and path.
     i = 0
     for e1, e2 in zip(start_list, path_list):
-        if e1 != e2:
+        if normcase(e1) != normcase(e2):
             break
         i += 1
 

Modified: python/branches/release31-maint/Lib/posixpath.py
==============================================================================
--- python/branches/release31-maint/Lib/posixpath.py	(original)
+++ python/branches/release31-maint/Lib/posixpath.py	Mon Oct 18 15:49:09 2010
@@ -444,8 +444,8 @@
     if start is None:
         start = curdir
 
-    start_list = abspath(start).split(sep)
-    path_list = abspath(path).split(sep)
+    start_list = [x for x in abspath(start).split(sep) if x]
+    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.
     i = len(commonprefix([start_list, path_list]))

Modified: python/branches/release31-maint/Lib/test/test_ntpath.py
==============================================================================
--- python/branches/release31-maint/Lib/test/test_ntpath.py	(original)
+++ python/branches/release31-maint/Lib/test/test_ntpath.py	Mon Oct 18 15:49:09 2010
@@ -236,6 +236,7 @@
         tester('ntpath.relpath("/", "/")', '.')
         tester('ntpath.relpath("/a", "/a")', '.')
         tester('ntpath.relpath("/a/b", "/a/b")', '.')
+        tester('ntpath.relpath("c:/foo", "C:/FOO")', '.')
 
 
 def test_main():

Modified: python/branches/release31-maint/Lib/test/test_posixpath.py
==============================================================================
--- python/branches/release31-maint/Lib/test/test_posixpath.py	(original)
+++ python/branches/release31-maint/Lib/test/test_posixpath.py	Mon Oct 18 15:49:09 2010
@@ -602,6 +602,15 @@
                              "../"+curdir+"/a/b")
             self.assertEqual(posixpath.relpath("a", "b/c"), "../../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:
             os.getcwd = real_getcwd
 
@@ -620,6 +629,15 @@
                              b"../"+curdir+b"/a/b")
             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"/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, "str", b"bytes")

Modified: python/branches/release31-maint/Misc/NEWS
==============================================================================
--- python/branches/release31-maint/Misc/NEWS	(original)
+++ python/branches/release31-maint/Misc/NEWS	Mon Oct 18 15:49:09 2010
@@ -128,6 +128,10 @@
 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()
   didn't match that of io.open(), and they also didn't get forwarded
   properly to TextIOWrapper in text mode.  Patch by Kai Zhu.


More information about the Python-checkins mailing list