diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -3335,7 +3335,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.6') missing = [a for a in _cmdfuncattrs if not util.safehasattr(f, a)] if not missing: continue @@ -153,7 +156,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 @@ -1590,4 +1590,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 < 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.6, update your code.) * (glob)