# HG changeset patch # User Gregory Szorc # Date 1646195343 28800 # Node ID df56e6bd37f6638a415aee115ad5ad86e8eec423 # Parent 57b58413dad15af88d8307e4eb9774f01324b54d py3: use pickle directly pycompat.pickle abstracted over the different pickle modules in Python 2 and 3. Now that we're Python 3 only, it is safe to use the `pickle` module directly. So this commit does that. As part of this we remove the rules from check-code.py that were forbidden direct pickle module use. We retain the `util.pickle` symbol for backwards compatibility, just in case some extensions were using it. Differential Revision: https://phab.mercurial-scm.org/D12249 diff -r 57b58413dad1 -r df56e6bd37f6 contrib/check-code.py --- a/contrib/check-code.py Wed Mar 02 17:51:27 2022 -0800 +++ b/contrib/check-code.py Tue Mar 01 20:29:03 2022 -0800 @@ -446,8 +446,6 @@ ), (r'^import urlparse', "don't use urlparse, use util.urlreq"), (r'^import xmlrpclib', "don't use xmlrpclib, use util.xmlrpclib"), - (r'^import cPickle', "don't use cPickle, use util.pickle"), - (r'^import pickle', "don't use pickle, use util.pickle"), (r'^import httplib', "don't use httplib, use util.httplib"), (r'^import BaseHTTPServer', "use util.httpserver instead"), ( diff -r 57b58413dad1 -r df56e6bd37f6 hgext/convert/common.py --- a/hgext/convert/common.py Wed Mar 02 17:51:27 2022 -0800 +++ b/hgext/convert/common.py Tue Mar 01 20:29:03 2022 -0800 @@ -10,6 +10,7 @@ import datetime import errno import os +import pickle import re import shlex import subprocess @@ -25,7 +26,6 @@ ) from mercurial.utils import procutil -pickle = util.pickle propertycache = util.propertycache diff -r 57b58413dad1 -r df56e6bd37f6 hgext/convert/cvsps.py --- a/hgext/convert/cvsps.py Wed Mar 02 17:51:27 2022 -0800 +++ b/hgext/convert/cvsps.py Tue Mar 01 20:29:03 2022 -0800 @@ -8,6 +8,7 @@ import functools import os +import pickle import re from mercurial.i18n import _ @@ -25,8 +26,6 @@ stringutil, ) -pickle = util.pickle - class logentry(object): """Class logentry has the following attributes: diff -r 57b58413dad1 -r df56e6bd37f6 hgext/convert/subversion.py --- a/hgext/convert/subversion.py Wed Mar 02 17:51:27 2022 -0800 +++ b/hgext/convert/subversion.py Tue Mar 01 20:29:03 2022 -0800 @@ -6,6 +6,7 @@ import codecs import locale import os +import pickle import re import xml.dom.minidom @@ -26,7 +27,6 @@ from . import common -pickle = util.pickle stringio = util.stringio propertycache = util.propertycache urlerr = util.urlerr diff -r 57b58413dad1 -r df56e6bd37f6 hgext/histedit.py --- a/hgext/histedit.py Wed Mar 02 17:51:27 2022 -0800 +++ b/hgext/histedit.py Tue Mar 01 20:29:03 2022 -0800 @@ -202,6 +202,7 @@ import functools import os +import pickle import struct from mercurial.i18n import _ @@ -245,7 +246,6 @@ urlutil, ) -pickle = util.pickle cmdtable = {} command = registrar.command(cmdtable) diff -r 57b58413dad1 -r df56e6bd37f6 mercurial/formatter.py --- a/mercurial/formatter.py Wed Mar 02 17:51:27 2022 -0800 +++ b/mercurial/formatter.py Tue Mar 01 20:29:03 2022 -0800 @@ -110,6 +110,7 @@ import contextlib import itertools import os +import pickle from .i18n import _ from .node import ( @@ -133,8 +134,6 @@ stringutil, ) -pickle = util.pickle - def isprintable(obj): """Check if the given object can be directly passed in to formatter's diff -r 57b58413dad1 -r df56e6bd37f6 mercurial/util.py --- a/mercurial/util.py Wed Mar 02 17:51:27 2022 -0800 +++ b/mercurial/util.py Tue Mar 01 20:29:03 2022 -0800 @@ -76,7 +76,6 @@ cookielib = pycompat.cookielib httplib = pycompat.httplib -pickle = pycompat.pickle safehasattr = pycompat.safehasattr socketserver = pycompat.socketserver bytesio = pycompat.bytesio diff -r 57b58413dad1 -r df56e6bd37f6 mercurial/worker.py --- a/mercurial/worker.py Wed Mar 02 17:51:27 2022 -0800 +++ b/mercurial/worker.py Tue Mar 01 20:29:03 2022 -0800 @@ -9,6 +9,7 @@ import errno import os +import pickle import signal import sys import threading @@ -27,7 +28,6 @@ error, pycompat, scmutil, - util, ) @@ -256,7 +256,7 @@ os.close(w) os.close(rfd) for result in func(*(staticargs + (pargs,))): - os.write(wfd, util.pickle.dumps(result)) + os.write(wfd, pickle.dumps(result)) return 0 ret = scmutil.callcatch(ui, workerfunc) @@ -292,7 +292,7 @@ while openpipes > 0: for key, events in selector.select(): try: - res = util.pickle.load(_blockingreader(key.fileobj)) + res = pickle.load(_blockingreader(key.fileobj)) if hasretval and res[0]: retval.update(res[1]) else: diff -r 57b58413dad1 -r df56e6bd37f6 tests/test-status.t --- a/tests/test-status.t Wed Mar 02 17:51:27 2022 -0800 +++ b/tests/test-status.t Tue Mar 01 20:29:03 2022 -0800 @@ -316,8 +316,8 @@ $ hg status -A -Tpickle > pickle >>> from __future__ import print_function + >>> import pickle >>> from mercurial import util - >>> pickle = util.pickle >>> data = sorted((x[b'status'].decode(), x[b'path'].decode()) for x in pickle.load(open("pickle", r"rb"))) >>> for s, p in data: print("%s %s" % (s, p)) ! deleted diff -r 57b58413dad1 -r df56e6bd37f6 tests/test-stdio.py --- a/tests/test-stdio.py Wed Mar 02 17:51:27 2022 -0800 +++ b/tests/test-stdio.py Tue Mar 01 20:29:03 2022 -0800 @@ -7,6 +7,7 @@ import contextlib import errno import os +import pickle import signal import subprocess import sys @@ -336,7 +337,7 @@ proc.stdin.close() def post_child_check(): - err = util.pickle.load(err_f) + err = pickle.load(err_f) self.assertEqual(err.errno, errno.EPIPE) self.assertEqual(err.strerror, "Broken pipe")