cpython: aad7e68eff0a (original) (raw)
Mercurial > cpython
changeset 82249:aad7e68eff0a 3.3
Fix posixpath.realpath() for multiple pardirs (fixes issue #6975). [#6975]
Serhiy Storchaka storchaka@gmail.com | |
---|---|
date | Mon, 18 Feb 2013 12:21:30 +0200 |
parents | 88c04657c9f1(current diff)cb3fbadb65aa(diff) |
children | f99ff3b01fab 38bb2a46692e |
files | Lib/posixpath.py Lib/test/test_posixpath.py |
diffstat | 2 files changed, 22 insertions(+), 2 deletions(-)[+] [-] Lib/posixpath.py 6 Lib/test/test_posixpath.py 18 |
line wrap: on
line diff
--- a/Lib/posixpath.py +++ b/Lib/posixpath.py @@ -418,9 +418,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 @@ -340,6 +340,24 @@ class PosixPathTest(unittest.TestCase): self.assertEqual(posixpath.normpath(b"///..//./foo/.//bar"), b"/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)
self.assertEqual(realpath(b'.'), os.getcwdb())[](#l2.12)
self.assertEqual(realpath(b'./.'), os.getcwdb())[](#l2.13)
self.assertEqual(realpath(b'/'.join([b'.'] * 100)), os.getcwdb())[](#l2.14)
- def test_realpath_pardir(self):
self.assertEqual(realpath('..'), dirname(os.getcwd()))[](#l2.17)
self.assertEqual(realpath('../..'), dirname(dirname(os.getcwd())))[](#l2.18)
self.assertEqual(realpath('/'.join(['..'] * 100)), '/')[](#l2.19)
self.assertEqual(realpath(b'..'), dirname(os.getcwdb()))[](#l2.21)
self.assertEqual(realpath(b'../..'), dirname(dirname(os.getcwdb())))[](#l2.22)
self.assertEqual(realpath(b'/'.join([b'..'] * 100)), b'/')[](#l2.23)
+ @unittest.skipUnless(hasattr(os, "symlink"), "Missing symlink implementation") @skip_if_ABSTFN_contains_backslash