hgext/convert/subversion.py
branchstable
changeset 44968 75b59d221aa3
parent 44966 0c27d981131a
child 44969 d545b895234a
equal deleted inserted replaced
44967:de7bdb0e2a95 44968:75b59d221aa3
   319                 and path[:1] == b'/'
   319                 and path[:1] == b'/'
   320                 and path[1:2].isalpha()
   320                 and path[1:2].isalpha()
   321                 and path[2:6].lower() == b'%3a/'
   321                 and path[2:6].lower() == b'%3a/'
   322             ):
   322             ):
   323                 path = path[:2] + b':/' + path[6:]
   323                 path = path[:2] + b':/' + path[6:]
   324             path = urlreq.url2pathname(path)
   324             # pycompat.fsdecode() / pycompat.fsencode() are used so that bytes
       
   325             # in the URL roundtrip correctly on Unix. urlreq.url2pathname() on
       
   326             # py3 will decode percent-encoded bytes using the utf-8 encoding
       
   327             # and the "replace" error handler. This means that it will not
       
   328             # preserve non-UTF-8 bytes (https://bugs.python.org/issue40983).
       
   329             # url.open() uses the reverse function (urlreq.pathname2url()) and
       
   330             # has a similar problem
       
   331             # (https://bz.mercurial-scm.org/show_bug.cgi?id=6357). It makes
       
   332             # sense to solve both problems together and handle all file URLs
       
   333             # consistently. For now, we warn.
       
   334             unicodepath = urlreq.url2pathname(pycompat.fsdecode(path))
       
   335             if pycompat.ispy3 and u'\N{REPLACEMENT CHARACTER}' in unicodepath:
       
   336                 ui.warn(
       
   337                     _(
       
   338                         b'on Python 3, we currently do not support non-UTF-8 '
       
   339                         b'percent-encoded bytes in file URLs for Subversion '
       
   340                         b'repositories\n'
       
   341                     )
       
   342                 )
       
   343             path = pycompat.fsencode(unicodepath)
   325     except ValueError:
   344     except ValueError:
   326         proto = b'file'
   345         proto = b'file'
   327         path = os.path.abspath(url)
   346         path = os.path.abspath(url)
   328     if proto == b'file':
   347     if proto == b'file':
   329         path = util.pconvert(path)
   348         path = util.pconvert(path)