convert: handle percent-encoded bytes in file URLs like Subversion


convert: handle percent-encoded bytes in file URLs like Subversion

75b59d221aa3 added most of the code that gets removed by this patch. It helped
making progress on Python 3, but the reasoning was wrong in many ways. I tried
to retract it while it was queued, but it was too late.

Back then, I was asssuming that what happened on Python 2 (preserving bytes) is
correct and my Python 3 change is a hack. However it turned out that Subversion
interprets percent-encoded bytes as UTF-8. Accepting the same format as
Subversion is a good idea.

Consistency with urlreq.pathname2url() (as described in the removed comment)
doesn’t matter because that function is only used for passing paths to urllib.

This is not a backwards-incompatible change because before 5c0d5b48e58c,
non-ASCII filenames didn’t work at all on Python 2.

When the locale encoding is ISO-8859-15, svn accepts file:///tmp/a%E2%82%AC
for /tmp/a€. Before this patch, this was the case for this extension on
Python 3, but not on Python 2. This patch makes it work like with svn on both
Python 2 and Python 3.


Manuel Jacob <me@manueljacob.de>Jun 30 2020, 1:23 AM
rHGddf66c218104: convert: add docstring on convert.subversion.geturl()