summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2010-08-01 19:17:57 (GMT)
committerGeorg Brandl <georg@python.org>2010-08-01 19:17:57 (GMT)
commit611f8f5e8eb2742fd720dc0280e77b8d634639cb (patch)
treeee504fb9957b4780173468ebb9d193be3c2cbf3f /Lib
parente5d518f2526ab1008232767080b867cdb1eb052d (diff)
downloadcpython-611f8f5e8eb2742fd720dc0280e77b8d634639cb.zip
cpython-611f8f5e8eb2742fd720dc0280e77b8d634639cb.tar.gz
cpython-611f8f5e8eb2742fd720dc0280e77b8d634639cb.tar.bz2
Merged revisions 83352,83355-83358,83362,83366,83368-83369 via svnmerge from
svn+ssh://svn.python.org/python/branches/py3k ........ r83352 | georg.brandl | 2010-07-31 20:11:07 +0200 (Sa, 31 Jul 2010) | 1 line #9440: Remove borderline test case that fails based on unpredictable conditions such as compiler flags. ........ r83355 | georg.brandl | 2010-07-31 21:17:11 +0200 (Sa, 31 Jul 2010) | 1 line Fix bad merge: test_support -> support. ........ r83356 | georg.brandl | 2010-07-31 21:29:15 +0200 (Sa, 31 Jul 2010) | 1 line Remove trailing whitespace. ........ r83357 | georg.brandl | 2010-07-31 21:59:55 +0200 (Sa, 31 Jul 2010) | 1 line #5778: document that sys.version can contain a newline. ........ r83358 | georg.brandl | 2010-07-31 22:05:31 +0200 (Sa, 31 Jul 2010) | 1 line #9442: do not document a specific format for sys.version; rather refer to version_info and the platform module. ........ r83362 | georg.brandl | 2010-07-31 23:12:15 +0200 (Sa, 31 Jul 2010) | 1 line #8910: add a file explaining why Lib/test/data is there. ........ r83366 | georg.brandl | 2010-07-31 23:26:40 +0200 (Sa, 31 Jul 2010) | 1 line There always is a False and True now. ........ r83368 | georg.brandl | 2010-07-31 23:40:15 +0200 (Sa, 31 Jul 2010) | 1 line #7909: the prefixes \\.\ and \\?\ indicate special Windows paths, do not try to manipulate them. See http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx for details. ........ r83369 | georg.brandl | 2010-07-31 23:41:42 +0200 (Sa, 31 Jul 2010) | 1 line Fix "Berkeley" name. ........
Diffstat (limited to 'Lib')
-rw-r--r--Lib/ntpath.py13
-rw-r--r--Lib/test/test_ntpath.py3
-rw-r--r--Lib/test/test_optparse.py6
-rw-r--r--Lib/test/test_tcl.py2
4 files changed, 19 insertions, 5 deletions
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
index 1cec895..6aa1e85 100644
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -70,6 +70,12 @@ def _get_colon(path):
else:
return ':'
+def _get_special(path):
+ if isinstance(path, bytes):
+ return (b'\\\\.\\', b'\\\\?\\')
+ else:
+ return ('\\\\.\\', '\\\\?\\')
+
# Normalize the case of a pathname and map slashes to backslashes.
# Other normalizations (such as optimizing '../' away) are not done
# (this is done by normpath).
@@ -508,6 +514,13 @@ def normpath(path):
"""Normalize path, eliminating double slashes, etc."""
sep = _get_sep(path)
dotdot = _get_dot(path) * 2
+ special_prefixes = _get_special(path)
+ if path.startswith(special_prefixes):
+ # in the case of paths with these prefixes:
+ # \\.\ -> device names
+ # \\?\ -> literal paths
+ # do not do any normalization, but return the path unchanged
+ return path
path = path.replace(_get_altsep(path), sep)
prefix, path = splitdrive(path)
diff --git a/Lib/test/test_ntpath.py b/Lib/test/test_ntpath.py
index 4a7a48b..8ff7075 100644
--- a/Lib/test/test_ntpath.py
+++ b/Lib/test/test_ntpath.py
@@ -174,6 +174,9 @@ class TestNtpath(unittest.TestCase):
tester("ntpath.normpath('C:////a/b')", r'C:\a\b')
tester("ntpath.normpath('//machine/share//a/b')", r'\\machine\share\a\b')
+ tester("ntpath.normpath('\\\\.\\NUL')", r'\\.\NUL')
+ tester("ntpath.normpath('\\\\?\\D:/XY\\Z')", r'\\?\D:/XY\Z')
+
def test_expandvars(self):
with support.EnvironmentVarGuard() as env:
env.clear()
diff --git a/Lib/test/test_optparse.py b/Lib/test/test_optparse.py
index 79467b0..b68e31d 100644
--- a/Lib/test/test_optparse.py
+++ b/Lib/test/test_optparse.py
@@ -783,15 +783,13 @@ class TestBool(BaseTest):
(options, args) = self.assertParseOK(["-q"],
{'verbose': 0},
[])
- if hasattr(__builtins__, 'False'):
- self.assertTrue(options.verbose is False)
+ self.assertTrue(options.verbose is False)
def test_bool_true(self):
(options, args) = self.assertParseOK(["-v"],
{'verbose': 1},
[])
- if hasattr(__builtins__, 'True'):
- self.assertTrue(options.verbose is True)
+ self.assertTrue(options.verbose is True)
def test_bool_flicker_on_and_off(self):
self.assertParseOK(["-qvq", "-q", "-v"],
diff --git a/Lib/test/test_tcl.py b/Lib/test/test_tcl.py
index a269db8..542986c 100644
--- a/Lib/test/test_tcl.py
+++ b/Lib/test/test_tcl.py
@@ -143,7 +143,7 @@ class TclTest(unittest.TestCase):
fullname[0],
fullname[3:])
- with test_support.EnvironmentVarGuard() as env:
+ with support.EnvironmentVarGuard() as env:
env.unset("TCL_LIBRARY")
f = os.popen('%s -c "import Tkinter; print Tkinter"' % (unc_name,))