diff --git a/contrib/perf.py b/contrib/perf.py --- a/contrib/perf.py +++ b/contrib/perf.py @@ -40,6 +40,7 @@ util, ) + # for "historical portability": # try to import modules separately (in dict order), and ignore # failure, because these aren't available with early Mercurial @@ -64,6 +65,12 @@ from mercurial import scmutil # since 1.9 (or 8b252e826c68) except ImportError: pass +try: + from mercurial import pycompat + getargspec = pycompat.getargspec # added to module after 4.5 +except (ImportError, AttributeError): + import inspect + getargspec = inspect.getargspec # for "historical portability": # define util.safehasattr forcibly, because util.safehasattr has been @@ -114,9 +121,8 @@ if safehasattr(registrar, 'command'): command = registrar.command(cmdtable) elif safehasattr(cmdutil, 'command'): - import inspect command = cmdutil.command(cmdtable) - if 'norepo' not in inspect.getargspec(command)[0]: + if 'norepo' not in getargspec(command).args: # for "historical portability": # wrap original cmdutil.command, because "norepo" option has # been available since 3.1 (or 75a96326cecb) diff --git a/mercurial/extensions.py b/mercurial/extensions.py --- a/mercurial/extensions.py +++ b/mercurial/extensions.py @@ -195,11 +195,7 @@ try: extsetup(ui) except TypeError: - # Try to use getfullargspec (Python 3) first, and fall - # back to getargspec only if it doesn't exist so as to - # avoid warnings. - if getattr(inspect, 'getfullargspec', - getattr(inspect, 'getargspec'))(extsetup).args: + if pycompat.getargspec(extsetup).args: raise extsetup() # old extsetup with no ui argument except Exception as inst: diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -9,7 +9,6 @@ import errno import hashlib -import inspect import os import random import time @@ -1068,7 +1067,7 @@ if not fn: fn = lambda s, c, **kwargs: util.filter(s, c) # Wrap old filters not supporting keyword arguments - if not inspect.getargspec(fn)[2]: + if not pycompat.getargspec(fn)[2]: oldfn = fn fn = lambda s, c, **kwargs: oldfn(s, c) l.append((mf, fn, params)) diff --git a/mercurial/pycompat.py b/mercurial/pycompat.py --- a/mercurial/pycompat.py +++ b/mercurial/pycompat.py @@ -11,6 +11,7 @@ from __future__ import absolute_import import getopt +import inspect import os import shlex import sys @@ -65,6 +66,7 @@ maplist = lambda *args: list(map(*args)) ziplist = lambda *args: list(zip(*args)) rawinput = input + getargspec = inspect.getfullargspec # TODO: .buffer might not exist if std streams were replaced; we'll need # a silly wrapper to make a bytes stream backed by a unicode one. @@ -330,6 +332,8 @@ maplist = map ziplist = zip rawinput = raw_input + getargspec = inspect.getargspec + def emailparser(*args, **kwargs): import email.parser