dispatch: show deprecation warning if command has no attributes (
issue5137)
norepo/optionalrepo/inferrepo were removed by
aa73d6a5d9ea, which would be
significant API change. This patch tries to avoid crash even if ancient
third-party extensions are enabled.
--- a/mercurial/dispatch.py Mon Mar 14 00:14:43 2016 +0900
+++ b/mercurial/dispatch.py Sat Jan 09 22:46:26 2016 +0900
@@ -747,7 +747,12 @@
[], {})
def _cmdattr(ui, cmd, func, attr):
- return getattr(func, attr)
+ try:
+ return getattr(func, attr)
+ except AttributeError:
+ ui.deprecwarn("missing attribute '%s', use @command decorator "
+ "to register '%s'" % (attr, cmd), '3.8')
+ return False
_loaded = set()
--- a/tests/test-extension.t Mon Mar 14 00:14:43 2016 +0900
+++ b/tests/test-extension.t Sat Jan 09 22:46:26 2016 +0900
@@ -1203,6 +1203,48 @@
$ cd ..
+Test compatibility with extension commands that don't use @command (issue5137)
+
+ $ hg init deprecated
+ $ cd deprecated
+
+ $ cat <<EOF > deprecatedcmd.py
+ > def deprecatedcmd(repo, ui):
+ > pass
+ > cmdtable = {
+ > 'deprecatedcmd': (deprecatedcmd, [], ''),
+ > }
+ > EOF
+ $ cat <<EOF > .hg/hgrc
+ > [extensions]
+ > deprecatedcmd = `pwd`/deprecatedcmd.py
+ > mq = !
+ > hgext.mq = !
+ > hgext/mq = !
+ > [alias]
+ > deprecatedalias = deprecatedcmd
+ > EOF
+
+ $ hg deprecatedcmd
+ devel-warn: missing attribute 'norepo', use @command decorator to register 'deprecatedcmd'
+ (compatibility will be dropped after Mercurial-3.8, update your code.) at: * (glob)
+
+ $ hg deprecatedalias
+ devel-warn: missing attribute 'norepo', use @command decorator to register 'deprecatedalias'
+ (compatibility will be dropped after Mercurial-3.8, update your code.) at: * (glob)
+
+ no warning unless command is executed:
+
+ $ hg paths
+
+ but mq iterates over command table:
+
+ $ hg --config extensions.mq= paths
+ devel-warn: missing attribute 'norepo', use @command decorator to register 'deprecatedcmd'
+ (compatibility will be dropped after Mercurial-3.8, update your code.) at: * (glob)
+
+ $ cd ..
+
Test synopsis and docstring extending
$ hg init exthelp