Show More
@@ -144,6 +144,43 b' def zgenerator(f):' | |||
|
144 | 144 | raise IOError(None, _('connection ended unexpectedly')) |
|
145 | 145 | yield zd.flush() |
|
146 | 146 | |
|
147 | _safe = ('abcdefghijklmnopqrstuvwxyz' | |
|
148 | 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | |
|
149 | '0123456789' '_.-/') | |
|
150 | _safeset = None | |
|
151 | _hex = None | |
|
152 | def quotepath(path): | |
|
153 | '''quote the path part of a URL | |
|
154 | ||
|
155 | This is similar to urllib.quote, but it also tries to avoid | |
|
156 | quoting things twice (inspired by wget): | |
|
157 | ||
|
158 | >>> quotepath('abc def') | |
|
159 | 'abc%20def' | |
|
160 | >>> quotepath('abc%20def') | |
|
161 | 'abc%20def' | |
|
162 | >>> quotepath('abc%20 def') | |
|
163 | 'abc%20%20def' | |
|
164 | >>> quotepath('abc def%20') | |
|
165 | 'abc%20def%20' | |
|
166 | >>> quotepath('abc def%2') | |
|
167 | 'abc%20def%252' | |
|
168 | >>> quotepath('abc def%') | |
|
169 | 'abc%20def%25' | |
|
170 | ''' | |
|
171 | global _safeset, _hex | |
|
172 | if _safeset is None: | |
|
173 | _safeset = util.set(_safe) | |
|
174 | _hex = util.set('abcdefABCDEF0123456789') | |
|
175 | l = list(path) | |
|
176 | for i in xrange(len(l)): | |
|
177 | c = l[i] | |
|
178 | if c == '%' and i + 2 < len(l) and (l[i+1] in _hex and l[i+2] in _hex): | |
|
179 | pass | |
|
180 | elif c not in _safeset: | |
|
181 | l[i] = '%%%02X' % ord(c) | |
|
182 | return ''.join(l) | |
|
183 | ||
|
147 | 184 | class httprepository(remoterepository): |
|
148 | 185 | def __init__(self, ui, path): |
|
149 | 186 | self.path = path |
@@ -153,13 +190,16 b' class httprepository(remoterepository):' | |||
|
153 | 190 | if query or frag: |
|
154 | 191 | raise util.Abort(_('unsupported URL component: "%s"') % |
|
155 | 192 | (query or frag)) |
|
156 |
if not urlpath: |
|
|
193 | if not urlpath: | |
|
194 | urlpath = '/' | |
|
195 | urlpath = quotepath(urlpath) | |
|
157 | 196 | host, port, user, passwd = netlocsplit(netloc) |
|
158 | 197 | |
|
159 | 198 | # urllib cannot handle URLs with embedded user or passwd |
|
160 | 199 | self._url = urlparse.urlunsplit((scheme, netlocunsplit(host, port), |
|
161 | 200 | urlpath, '', '')) |
|
162 | 201 | self.ui = ui |
|
202 | self.ui.debug(_('using %s\n') % self._url) | |
|
163 | 203 | |
|
164 | 204 | proxyurl = ui.config("http_proxy", "host") or os.getenv('http_proxy') |
|
165 | 205 | # XXX proxyauthinfo = None |
General Comments 0
You need to be logged in to leave comments.
Login now