saved_cwd = os.path.normpath(os.getcwdu())
abspath_cwd = fileutil.abspath_expanduser_unicode(u".")
+ abspath_cwd_notlong = fileutil.abspath_expanduser_unicode(u".", long_path=False)
self.failUnless(isinstance(saved_cwd, unicode), saved_cwd)
self.failUnless(isinstance(abspath_cwd, unicode), abspath_cwd)
if sys.platform == "win32":
self.failUnlessReallyEqual(abspath_cwd, fileutil.to_windows_long_path(saved_cwd))
else:
self.failUnlessReallyEqual(abspath_cwd, saved_cwd)
+ self.failUnlessReallyEqual(abspath_cwd_notlong, saved_cwd)
self.failUnlessReallyEqual(fileutil.to_windows_long_path(u"\\\\?\\foo"), u"\\\\?\\foo")
self.failUnlessReallyEqual(fileutil.to_windows_long_path(u"\\\\.\\foo"), u"\\\\.\\foo")
self.failUnlessReallyEqual(baz[4], bar[4]) # same drive
+ baz_notlong = fileutil.abspath_expanduser_unicode(u"\\baz", long_path=False)
+ self.failIf(baz_notlong.startswith(u"\\\\?\\"), baz_notlong)
+ self.failUnlessReallyEqual(baz_notlong[1 :], u":\\baz")
+
+ bar_notlong = fileutil.abspath_expanduser_unicode(u"\\bar", base=baz, long_path=False)
+ self.failIf(bar_notlong.startswith(u"\\\\?\\"), bar_notlong)
+ self.failUnlessReallyEqual(bar_notlong[1 :], u":\\bar")
+ # not u":\\baz\\bar", because \bar is absolute on the current drive.
+
+ self.failUnlessReallyEqual(baz_notlong[0], bar_notlong[0]) # same drive
+
self.failIfIn(u"~", fileutil.abspath_expanduser_unicode(u"~"))
+ self.failIfIn(u"~", fileutil.abspath_expanduser_unicode(u"~", long_path=False))
cwds = ['cwd']
try:
for upath in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\', u'~'):
uabspath = fileutil.abspath_expanduser_unicode(upath)
self.failUnless(isinstance(uabspath, unicode), uabspath)
+
+ uabspath_notlong = fileutil.abspath_expanduser_unicode(upath, long_path=False)
+ self.failUnless(isinstance(uabspath_notlong, unicode), uabspath_notlong)
finally:
os.chdir(saved_cwd)
raise usage.UsageError("Argument %s cannot be decoded as %s." %
(quote_output(s), io_encoding))
-def argv_to_abspath(s):
+def argv_to_abspath(s, long_path=True):
"""
Convenience function to decode an argv element to an absolute path, with ~ expanded.
If this fails, raise a UsageError.
if decoded.startswith(u'-'):
raise usage.UsageError("Path argument %s cannot start with '-'.\nUse %s if you intended to refer to a file."
% (quote_output(s), quote_output(os.path.join('.', s))))
- return abspath_expanduser_unicode(decoded)
+ return abspath_expanduser_unicode(decoded, long_path=long_path)
def unicode_to_argv(s, mangle=False):
"""
except ImportError:
pass
-def abspath_expanduser_unicode(path, base=None):
+def abspath_expanduser_unicode(path, base=None, long_path=True):
"""
Return the absolute version of a path. If 'base' is given and 'path' is relative,
the path will be expanded relative to 'base'.
'path' must be a Unicode string. 'base', if given, must be a Unicode string
corresponding to an absolute path as returned by a previous call to
abspath_expanduser_unicode.
+ On Windows, the result will be a long path unless long_path is given as False.
"""
if not isinstance(path, unicode):
raise AssertionError("paths must be Unicode strings")
# there is always at least one Unicode path component.
path = os.path.normpath(path)
- if sys.platform == "win32":
+ if sys.platform == "win32" and long_path:
path = to_windows_long_path(path)
return path