mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 08:47:12 +03:00
5f52c722cf
The cPickle is renamed to _pickle in python3 and this C extension is available in pickle which was not included in earlier versions. So imports are conditionalized to import cPickle in py2 and pickle in py3. Moreover the use of pickle in py2 is switched to cPickle as the C extension is faster. The hack is added in util.py and the modules import util.pickle
130 lines
2.7 KiB
Python
130 lines
2.7 KiB
Python
# pycompat.py - portability shim for python 3
|
|
#
|
|
# This software may be used and distributed according to the terms of the
|
|
# GNU General Public License version 2 or any later version.
|
|
|
|
"""Mercurial portability shim for python 3.
|
|
|
|
This contains aliases to hide python version-specific details from the core.
|
|
"""
|
|
|
|
from __future__ import absolute_import
|
|
|
|
try:
|
|
import cPickle as pickle
|
|
pickle.dumps
|
|
except ImportError:
|
|
import pickle
|
|
|
|
try:
|
|
import cStringIO as io
|
|
stringio = io.StringIO
|
|
except ImportError:
|
|
import io
|
|
stringio = io.StringIO
|
|
|
|
try:
|
|
import Queue as _queue
|
|
_queue.Queue
|
|
except ImportError:
|
|
import queue as _queue
|
|
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:
|
|
import builtins
|
|
builtins.xrange = range
|