# HG changeset patch # User Mads Kiilerich # Date 1293320629 -3600 # Node ID 1aea66b71f4f915d482ea2be77e5322acf14db19 # Parent 5314cbb775f6e2034be96bc64a54a0ec7c553a19 extensions: warn about invalid extensions when listing disabled commands Invalid extensions in hgext/ could in some cases cause a crash when searching for unknown commands in disabled extensions. With this change we issue a warning if extracting commands from the extensions fails. Traceback is available on request. Reported on https://bugzilla.redhat.com/show_bug.cgi?id=663183 with forest.py. diff -r 5314cbb775f6 -r 1aea66b71f4f mercurial/commands.py --- a/mercurial/commands.py Wed Dec 22 13:25:00 2010 -0600 +++ b/mercurial/commands.py Sun Dec 26 00:43:49 2010 +0100 @@ -2034,7 +2034,7 @@ 'extensions\n')) def helpextcmd(name): - cmd, ext, mod = extensions.disabledcmd(name, ui.config('ui', 'strict')) + cmd, ext, mod = extensions.disabledcmd(ui, name, ui.config('ui', 'strict')) doc = gettext(mod.__doc__).splitlines()[0] msg = help.listexts(_("'%s' is provided by the following " diff -r 5314cbb775f6 -r 1aea66b71f4f mercurial/extensions.py --- a/mercurial/extensions.py Wed Dec 22 13:25:00 2010 -0600 +++ b/mercurial/extensions.py Sun Dec 26 00:43:49 2010 +0100 @@ -248,7 +248,7 @@ if name in paths: return _disabledhelp(paths[name]) -def disabledcmd(cmd, strict=False): +def disabledcmd(ui, cmd, strict=False): '''import disabled extensions until cmd is found. returns (cmdname, extname, doc)''' @@ -266,6 +266,10 @@ getattr(mod, 'cmdtable', {}), strict) except (error.AmbiguousCommand, error.UnknownCommand): return + except Exception: + ui.warn(_('warning: error finding commands in %s\n') % path) + ui.traceback() + return for c in aliases: if c.startswith(cmd): cmd = c diff -r 5314cbb775f6 -r 1aea66b71f4f tests/test-extension.t --- a/tests/test-extension.t Wed Dec 22 13:25:00 2010 -0600 +++ b/tests/test-extension.t Sun Dec 26 00:43:49 2010 +0100 @@ -315,6 +315,11 @@ use "hg help extensions" for information on enabling extensions + $ cat > hgext/forest.py < cmdtable = None + > EOF $ hg --config extensions.path=./path.py help foo > /dev/null + warning: error finding commands in $TESTTMP/hgext/forest.py hg: unknown command 'foo' + warning: error finding commands in $TESTTMP/hgext/forest.py [255]