# HG changeset patch # User Yuya Nishihara # Date 1452349492 -32400 # Node ID d47d7d3bd07baf856c7fdac430730e2690509916 # Parent e5fbf968760088949a4585803aada0626164d826 extensions: show deprecation warning for the use of cmdutil.command Since this is a fundamental API for extensions, we set 1-year period until actually removing it. diff -r e5fbf9687600 -r d47d7d3bd07b mercurial/cmdutil.py --- a/mercurial/cmdutil.py Sat May 13 15:41:50 2017 +0900 +++ b/mercurial/cmdutil.py Sat Jan 09 23:24:52 2016 +0900 @@ -3335,7 +3335,10 @@ 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 -r e5fbf9687600 -r d47d7d3bd07b mercurial/extensions.py --- a/mercurial/extensions.py Sat May 13 15:41:50 2017 +0900 +++ b/mercurial/extensions.py Sat Jan 09 23:24:52 2016 +0900 @@ -121,10 +121,13 @@ # 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 @@ 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 -r e5fbf9687600 -r d47d7d3bd07b tests/test-extension.t --- a/tests/test-extension.t Sat May 13 15:41:50 2017 +0900 +++ b/tests/test-extension.t Sat Jan 09 23:24:52 2016 +0900 @@ -1590,4 +1590,19 @@ $ 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)