cpython: 50ed06b3d419 (original) (raw)
Mercurial > cpython
changeset 82247:50ed06b3d419 2.7
Fix posixpath.realpath() for multiple pardirs (fixes issue #6975). [#6975]
Serhiy Storchaka storchaka@gmail.com | |
---|---|
date | Mon, 18 Feb 2013 12:20:44 +0200 |
parents | a80ea934da9a |
children | bb5a8564e186 |
files | Lib/posixpath.py Lib/test/test_posixpath.py |
diffstat | 2 files changed, 14 insertions(+), 2 deletions(-)[+] [-] Lib/posixpath.py 6 Lib/test/test_posixpath.py 10 |
line wrap: on
line diff
--- a/Lib/posixpath.py +++ b/Lib/posixpath.py @@ -382,9 +382,11 @@ def _joinrealpath(path, rest, seen): if name == pardir: # parent dir if path:
path = dirname(path)[](#l1.7)
path, name = split(path)[](#l1.8)
if name == pardir:[](#l1.9)
path = join(path, pardir, pardir)[](#l1.10) else:[](#l1.11)
path = name[](#l1.12)
path = pardir[](#l1.13) continue[](#l1.14) newpath = join(path, name)[](#l1.15) if not islink(newpath):[](#l1.16)
--- a/Lib/test/test_posixpath.py +++ b/Lib/test/test_posixpath.py @@ -214,6 +214,16 @@ class PosixPathTest(unittest.TestCase): self.assertEqual(posixpath.normpath("///foo/.//bar//.//..//.//baz"), "/foo/baz") self.assertEqual(posixpath.normpath("///..//./foo/.//bar"), "/foo/bar")
- def test_realpath_curdir(self):
self.assertEqual(realpath('.'), os.getcwd())[](#l2.8)
self.assertEqual(realpath('./.'), os.getcwd())[](#l2.9)
self.assertEqual(realpath('/'.join(['.'] * 100)), os.getcwd())[](#l2.10)
- def test_realpath_pardir(self):
self.assertEqual(realpath('..'), dirname(os.getcwd()))[](#l2.13)
self.assertEqual(realpath('../..'), dirname(dirname(os.getcwd())))[](#l2.14)
self.assertEqual(realpath('/'.join(['..'] * 100)), '/')[](#l2.15)
+ if hasattr(os, "symlink"): def test_realpath_basic(self): # Basic operation.