Ensure the 'base' argument to abspath_expanduser_unicode takes effect on Windows. fixes #2398

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
This commit is contained in:
Daira Hopwood 2015-04-21 21:03:45 +01:00
parent edcdaa2799
commit eb34e0d625
2 changed files with 25 additions and 3 deletions

View File

@ -487,7 +487,25 @@ class FileUtil(ReallyEqualMixin, unittest.TestCase):
# adapted from <http://svn.python.org/view/python/branches/release26-maint/Lib/test/test_posixpath.py?view=markup&pathrev=78279#test_abspath>
self.failUnlessIn(u"foo", fileutil.abspath_expanduser_unicode(u"foo"))
foo = fileutil.abspath_expanduser_unicode(u"foo")
self.failUnless(foo.endswith(u"\\foo"), foo)
foobar = fileutil.abspath_expanduser_unicode(u"bar", base=foo)
self.failUnless(foobar.endswith(u"\\foo\\bar"), foobar)
if sys.platform == "win32":
# This is checking that a drive letter is added for a path without one.
baz = fileutil.abspath_expanduser_unicode(u"\\baz")
self.failUnless(baz.startswith(u"\\\\?\\"), baz)
self.failUnlessReallyEqual(baz[5 :], u":\\baz")
bar = fileutil.abspath_expanduser_unicode(u"\\bar", base=baz)
self.failUnless(bar.startswith(u"\\\\?\\"), bar)
self.failUnlessReallyEqual(bar[5 :], u":\\bar")
# not u":\\baz\\bar", because \bar is absolute on the current drive.
self.failUnlessReallyEqual(baz[4], bar[4]) # same drive
self.failIfIn(u"~", fileutil.abspath_expanduser_unicode(u"~"))
cwds = ['cwd']

View File

@ -318,10 +318,14 @@ def abspath_expanduser_unicode(path, base=None):
path = expanduser(path)
if _getfullpathname:
# On Windows, os.path.isabs will return True for paths without a drive letter,
# On Windows, os.path.isabs will incorrectly return True
# for paths without a drive letter (that are not UNC paths),
# e.g. "\\". See <http://bugs.python.org/issue1669539>.
try:
path = _getfullpathname(path or u".")
if base is None:
path = _getfullpathname(path or u".")
else:
path = _getfullpathname(os.path.join(base, path))
except OSError:
pass