comparison tests/test-convert-svn-encoding.t @ 45020:697212a830fb stable

convert: bail out in Subversion source if encountering non-ASCII HTTP(S) URL Before this patch, in the tested case, urllib raised `httplib.InvalidURL: URL can't contain control characters. '/\xff/!svn/ver/0/.svn' (found at least '\xff')`, which resulted in that the URL was never recognized as a Subversion repository. This patch adds a check that bails out if the URL contains non-ASCII characters. The warning is not overly user-friendly, but giving the user something to type into a search engine is definitively better than not explaining why the repository was not recognized. We could support non-ASCII chracters by quoting them before passing them to urllib. However, we would want to be compatible with what the `svn` command does, which converts the URL from the locale encoding to UTF-8, percent-encodes it and sends it to the server. If the locale encoding is not UTF-8, the behavior is IMHO not very intuitive, as the `svn` command may send different (percent-encoded) octets than what was passed on the console. Instead of copying this behavior, we better leave it forbidden.
author Manuel Jacob <me@manueljacob.de>
date Tue, 30 Jun 2020 04:55:52 +0200
parents 75b59d221aa3
children e3b19004087a
comparison
equal deleted inserted replaced
45013:bd0f122f3f51 45020:697212a830fb
151 e94e4422020e715add80525e8f0f46c9968689f1 branch\xc3\xa9e (esc) 151 e94e4422020e715add80525e8f0f46c9968689f1 branch\xc3\xa9e (esc)
152 f7e66f98380ed1e53a797c5c7a7a2616a7ab377d branch\xc3\xa9 (esc) 152 f7e66f98380ed1e53a797c5c7a7a2616a7ab377d branch\xc3\xa9 (esc)
153 153
154 $ cd .. 154 $ cd ..
155 155
156 Subversion sources don't support non-ASCII characters in HTTP(S) URLs.
157
158 $ XFF=$($PYTHON -c 'from mercurial.utils.procutil import stdout; stdout.write(b"\xff")')
159 $ hg convert --source-type=svn http://localhost:$HGPORT/$XFF test
160 initializing destination test repository
161 Subversion sources don't support non-ASCII characters in HTTP(S) URLs. Please percent-encode them.
162 http://localhost:$HGPORT/\xff does not look like a Subversion repository (esc)
163 abort: http://localhost:$HGPORT/\xff: missing or unsupported repository (esc)
164 [255]
165
156 #if py3 166 #if py3
157 For now, on Python 3, we abort when encountering non-UTF-8 percent-encoded 167 For now, on Python 3, we abort when encountering non-UTF-8 percent-encoded
158 bytes in a filename. 168 bytes in a filename.
159 169
160 $ hg convert file:///%ff test 170 $ hg convert file:///%ff test