Mercurial > hg-stable
changeset 49297:6c4c341d8fa5
convert: inline Python 3 variant of url2pathname_like_subversion()
author | Manuel Jacob <me@manueljacob.de> |
---|---|
date | Tue, 31 May 2022 01:06:29 +0200 |
parents | ef5f5f1cbd90 |
children | 76f56d69a457 |
files | hgext/convert/subversion.py |
diffstat | 1 files changed, 10 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/convert/subversion.py Tue May 31 00:50:29 2022 +0200 +++ b/hgext/convert/subversion.py Tue May 31 01:06:29 2022 +0200 @@ -364,32 +364,6 @@ } -class NonUtf8PercentEncodedBytes(Exception): - pass - - -# Subversion paths are Unicode. Since the percent-decoding is done on -# UTF-8-encoded strings, percent-encoded bytes are interpreted as UTF-8. -def url2pathname_like_subversion(unicodepath): - if pycompat.ispy3: - # On Python 3, we have to pass unicode to urlreq.url2pathname(). - # Percent-decoded bytes get decoded using UTF-8 and the 'replace' error - # handler. - unicodepath = urlreq.url2pathname(unicodepath) - if u'\N{REPLACEMENT CHARACTER}' in unicodepath: - raise NonUtf8PercentEncodedBytes - else: - return unicodepath - else: - # If we passed unicode on Python 2, it would be converted using the - # latin-1 encoding. Therefore, we pass UTF-8-encoded bytes. - unicodepath = urlreq.url2pathname(unicodepath.encode('utf-8')) - try: - return unicodepath.decode('utf-8') - except UnicodeDecodeError: - raise NonUtf8PercentEncodedBytes - - def issvnurl(ui, url): try: proto, path = url.split(b'://', 1) @@ -412,9 +386,15 @@ % pycompat.sysbytes(fsencoding) ) return False - try: - unicodepath = url2pathname_like_subversion(unicodepath) - except NonUtf8PercentEncodedBytes: + + # Subversion paths are Unicode. Since it does percent-decoding on + # UTF-8-encoded strings, percent-encoded bytes are interpreted as + # UTF-8. + # On Python 3, we have to pass unicode to urlreq.url2pathname(). + # Percent-decoded bytes get decoded using UTF-8 and the 'replace' + # error handler. + unicodepath = urlreq.url2pathname(unicodepath) + if u'\N{REPLACEMENT CHARACTER}' in unicodepath: ui.warn( _( b'Subversion does not support non-UTF-8 ' @@ -422,6 +402,7 @@ ) ) return False + # Below, we approximate how Subversion checks the path. On Unix, we # should therefore convert the path to bytes using `fsencoding` # (like Subversion does). On Windows, the right thing would