]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/blobdiff - src/allmydata/util/encodingutil.py
Fix a corner case for to_filepath on Windows to make it consistent with Unix.
[tahoe-lafs/tahoe-lafs.git] / src / allmydata / util / encodingutil.py
index efd1e218c1306076f5becc4afd0ada1f630a3731..65f5911a147515d786909aa03c05820caaba885f 100644 (file)
@@ -274,11 +274,18 @@ def extend_filepath(fp, segments):
         return fp
 
 def to_filepath(path):
-    precondition(isinstance(path, basestring), path=path)
+    precondition(isinstance(path, unicode if use_unicode_filepath else basestring),
+                 path=path)
 
     if isinstance(path, unicode) and not use_unicode_filepath:
         path = path.encode(filesystem_encoding)
 
+    if sys.platform == "win32":
+        _assert(isinstance(path, unicode), path=path)
+        if path.startswith(u"\\\\?\\") and len(path) > 4:
+            # FilePath normally strips trailing path separators, but not in this case.
+            path = path.rstrip(u"\\")
+
     return FilePath(path)
 
 def _decode(s):
@@ -297,12 +304,7 @@ def unicode_segments_from(base_fp, ancestor_fp):
     precondition(isinstance(base_fp, FilePath), base_fp=base_fp)
     precondition(isinstance(ancestor_fp, FilePath), ancestor_fp=ancestor_fp)
 
-    if hasattr(FilePath, 'asTextMode'):
-        return base_fp.asTextMode().segmentsFrom(ancestor_fp.asTextMode())
-    else:
-        bpt, apt = (type(base_fp.path), type(ancestor_fp.path))
-        _assert(bpt == apt, bpt=bpt, apt=apt)
-        return map(_decode, base_fp.segmentsFrom(ancestor_fp))
+    return base_fp.asTextMode().segmentsFrom(ancestor_fp.asTextMode())
 
 def unicode_platform():
     """