diff --git a/mercurial/pycompat.py b/mercurial/pycompat.py --- a/mercurial/pycompat.py +++ b/mercurial/pycompat.py @@ -25,6 +25,97 @@ except ImportError: empty = _queue.Empty queue = _queue.Queue +class _pycompatstub(object): + pass + +def _alias(alias, origin, items): + """ populate a _pycompatstub + + copies items from origin to alias + """ + def hgcase(item): + return item.replace('_', '').lower() + for item in items: + try: + setattr(alias, hgcase(item), getattr(origin, item)) + except AttributeError: + pass + +urlreq = _pycompatstub() +urlerr = _pycompatstub() +try: + import urllib2 + import urllib + _alias(urlreq, urllib, ( + "addclosehook", + "addinfourl", + "ftpwrapper", + "pathname2url", + "quote", + "splitattr", + "splitpasswd", + "splitport", + "splituser", + "unquote", + "url2pathname", + "urlencode", + "urlencode", + )) + _alias(urlreq, urllib2, ( + "AbstractHTTPHandler", + "BaseHandler", + "build_opener", + "FileHandler", + "FTPHandler", + "HTTPBasicAuthHandler", + "HTTPDigestAuthHandler", + "HTTPHandler", + "HTTPPasswordMgrWithDefaultRealm", + "HTTPSHandler", + "install_opener", + "ProxyHandler", + "Request", + "urlopen", + )) + _alias(urlerr, urllib2, ( + "HTTPError", + "URLError", + )) + +except ImportError: + import urllib.request + _alias(urlreq, urllib.request, ( + "AbstractHTTPHandler", + "addclosehook", + "addinfourl", + "BaseHandler", + "build_opener", + "FileHandler", + "FTPHandler", + "ftpwrapper", + "HTTPHandler", + "HTTPSHandler", + "install_opener", + "pathname2url", + "HTTPBasicAuthHandler", + "HTTPDigestAuthHandler", + "ProxyHandler", + "quote", + "Request", + "splitattr", + "splitpasswd", + "splitport", + "splituser", + "unquote", + "url2pathname", + "urlopen", + )) + import urllib.error + _alias(urlerr, urllib.error, ( + "HTTPError", + "URLError", + )) + try: xrange except NameError: diff --git a/mercurial/util.py b/mercurial/util.py --- a/mercurial/util.py +++ b/mercurial/util.py @@ -49,6 +49,8 @@ from . import ( for attr in ( 'empty', 'queue', + 'urlerr', + 'urlreq', 'stringio', ): globals()[attr] = getattr(pycompat, attr)