py3: introduce and use pycompat.getargspec
This is getfullargspec on py3, which means we can't use namedtuple
named accessors for all fields (eg keywords from getargspec is varkw
from getfullargspec, with the same meaning). Solves some warning
issues on Python 3.
I didn't clean up httpclient because that's vendored code I think we
should probably discard, and I didn't touch the manpage generator for
now either.
Differential Revision: https://phab.mercurial-scm.org/D2251
--- a/contrib/perf.py Tue Feb 13 23:37:58 2018 -0500
+++ b/contrib/perf.py Tue Feb 13 23:00:01 2018 -0700
@@ -64,6 +64,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 +120,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)
--- a/mercurial/extensions.py Tue Feb 13 23:37:58 2018 -0500
+++ b/mercurial/extensions.py Tue Feb 13 23:00:01 2018 -0700
@@ -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:
--- a/mercurial/localrepo.py Tue Feb 13 23:37:58 2018 -0500
+++ b/mercurial/localrepo.py Tue Feb 13 23:00:01 2018 -0700
@@ -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))
--- a/mercurial/pycompat.py Tue Feb 13 23:37:58 2018 -0500
+++ b/mercurial/pycompat.py Tue Feb 13 23:00:01 2018 -0700
@@ -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,7 @@
maplist = map
ziplist = zip
rawinput = raw_input
+ getargspec = inspect.getargspec
def emailparser(*args, **kwargs):
import email.parser