# HG changeset patch # User Manuel Jacob # Date 1653951989 -7200 # Node ID 6c4c341d8fa57c0a5a95eebe8c740ea81d0b056b # Parent ef5f5f1cbd90e175b63f2012157809b054c53763 convert: inline Python 3 variant of url2pathname_like_subversion() diff -r ef5f5f1cbd90 -r 6c4c341d8fa5 hgext/convert/subversion.py --- 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