Mercurial > hg
comparison mercurial/url.py @ 13819:d16894e29f91
httprepo/sshrepo: use url.url
Like the previous patch to getauthinfo(), this also makes
username/password parsing more forgiving for SSH URLs.
This also opens up the possibility of allowing non-numeric ports,
since the URL parser has no problem handling them.
Related issues:
- issue851: @ in password in http url
- issue2055: nonnumeric port bug with https protocol
author | Brodie Rao <brodie@bitheap.org> |
---|---|
date | Wed, 30 Mar 2011 20:01:35 -0700 |
parents | bf6156bab41b |
children | 65b89e80f892 |
comparison
equal
deleted
inserted
replaced
13818:bf6156bab41b | 13819:d16894e29f91 |
---|---|
904 self.retried_req = req | 904 self.retried_req = req |
905 self.retried = 0 | 905 self.retried = 0 |
906 return urllib2.HTTPBasicAuthHandler.http_error_auth_reqed( | 906 return urllib2.HTTPBasicAuthHandler.http_error_auth_reqed( |
907 self, auth_header, host, req, headers) | 907 self, auth_header, host, req, headers) |
908 | 908 |
909 def getauthinfo(path): | |
910 scheme, netloc, urlpath, query, frag = urlparse.urlsplit(path) | |
911 if not urlpath: | |
912 urlpath = '/' | |
913 if scheme != 'file': | |
914 # XXX: why are we quoting the path again with some smart | |
915 # heuristic here? Anyway, it cannot be done with file:// | |
916 # urls since path encoding is os/fs dependent (see | |
917 # urllib.pathname2url() for details). | |
918 urlpath = quotepath(urlpath) | |
919 host, port, user, passwd = netlocsplit(netloc) | |
920 | |
921 # urllib cannot handle URLs with embedded user or passwd | |
922 url = urlparse.urlunsplit((scheme, netlocunsplit(host, port), | |
923 urlpath, query, frag)) | |
924 if user: | |
925 netloc = host | |
926 if port: | |
927 netloc += ':' + port | |
928 # Python < 2.4.3 uses only the netloc to search for a password | |
929 authinfo = (None, (url, netloc), user, passwd or '') | |
930 else: | |
931 authinfo = None | |
932 return url, authinfo | |
933 | |
934 handlerfuncs = [] | 909 handlerfuncs = [] |
935 | 910 |
936 def opener(ui, authinfo=None): | 911 def opener(ui, authinfo=None): |
937 ''' | 912 ''' |
938 construct an opener suitable for urllib2 | 913 construct an opener suitable for urllib2 |