[PATCH 6 of 6 RFC] extensions: show deprecation warning for the use of cmdutil.command
Yuya Nishihara
yuya at tcha.org
Sat May 13 05:57:37 EDT 2017
# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1452349492 -32400
# Sat Jan 09 23:24:52 2016 +0900
# Node ID 1b5d23403828e246d89816c4826a25a7de586cee
# Parent 484b2808830a2a390d9e1128c6e88d9249097fa6
extensions: show deprecation warning for the use of cmdutil.command
This is RFC. Do we really want to remove cmdutil.command?
diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -3334,7 +3334,10 @@ def _performrevert(repo, parents, ctx, a
if f in copied:
repo.dirstate.copy(copied[f], f)
-command = registrar.command
+class command(registrar.command):
+ def _doregister(self, func, name, *args, **kwargs):
+ func._deprecatedregistrar = True # flag for deprecwarn in extensions.py
+ return super(command, self)._doregister(func, name, *args, **kwargs)
# a list of (ui, repo, otherpeer, opts, missing) functions called by
# commands.outgoing. "missing" is "missing" of the result of
diff --git a/mercurial/extensions.py b/mercurial/extensions.py
--- a/mercurial/extensions.py
+++ b/mercurial/extensions.py
@@ -121,10 +121,13 @@ def _reportimporterror(ui, err, failed,
# attributes set by registrar.command
_cmdfuncattrs = ('norepo', 'optionalrepo', 'inferrepo')
-def _validatecmdtable(cmdtable):
+def _validatecmdtable(ui, cmdtable):
"""Check if extension commands have required attributes"""
for c, e in cmdtable.iteritems():
f = e[0]
+ if getattr(f, '_deprecatedregistrar', False):
+ ui.deprecwarn("cmdutil.command is deprecated, use "
+ "registrar.command to register '%s'" % c, '4.3')
missing = [a for a in _cmdfuncattrs if not util.safehasattr(f, a)]
if not missing:
continue
@@ -152,7 +155,7 @@ def load(ui, name, path):
ui.warn(_('(third party extension %s requires version %s or newer '
'of Mercurial; disabling)\n') % (shortname, minver))
return
- _validatecmdtable(getattr(mod, 'cmdtable', {}))
+ _validatecmdtable(ui, getattr(mod, 'cmdtable', {}))
_extensions[shortname] = mod
_order.append(shortname)
diff --git a/tests/test-extension.t b/tests/test-extension.t
--- a/tests/test-extension.t
+++ b/tests/test-extension.t
@@ -1588,4 +1588,19 @@ Test synopsis and docstring extending
$ hg help bookmarks | grep GREPME
hg bookmarks [OPTIONS]... [NAME]... GREPME [--foo] [-x]
GREPME make sure that this is in the help!
+ $ cd ..
+Show deprecation warning for the use of cmdutil.command
+
+ $ cat > nonregistrar.py <<EOF
+ > from mercurial import cmdutil
+ > cmdtable = {}
+ > command = cmdutil.command(cmdtable)
+ > @command('foo', [], norepo=True)
+ > def foo(ui):
+ > pass
+ > EOF
+
+ $ hg --config extensions.nonregistrar=`pwd`/nonregistrar.py version > /dev/null
+ devel-warn: cmdutil.command is deprecated, use registrar.command to register 'foo'
+ (compatibility will be dropped after Mercurial-4.3, update your code.) * (glob)
More information about the Mercurial-devel
mailing list