Mercurial > public > mercurial-scm > hg-stable
diff mercurial/commands.py @ 10364:de1e7099d100
dispatch: provide help for disabled extensions and commands
Before a command is declared unknown, each extension in hgext is searched,
starting with hgext.<cmdname>. If there's a matching command, a help message
suggests the appropriate extension and how to enable it.
Every extension could potentially be imported, but for cases like rebase,
relink, etc. only one extension is imported.
For the case of "hg help disabledext", if the extension is in hgext, the
extension description is read and a similar help suggestion is printed.
No extension import occurs.
author | Brodie Rao <me+hg@dackz.net> |
---|---|
date | Sun, 07 Feb 2010 14:01:43 +0100 |
parents | a5576908b589 |
children | d757bc0c7865 |
line wrap: on
line diff
--- a/mercurial/commands.py Sun Feb 07 11:32:08 2010 +0100 +++ b/mercurial/commands.py Sun Feb 07 14:01:43 2010 +0100 @@ -1457,7 +1457,7 @@ displayer.show(ctx) displayer.close() -def help_(ui, name=None, with_version=False): +def help_(ui, name=None, with_version=False, unknowncmd=False): """show help for a given topic or a help overview With no arguments, print a list of commands with short help messages. @@ -1490,7 +1490,7 @@ ui.write('\n') try: - aliases, entry = cmdutil.findcmd(name, table, False) + aliases, entry = cmdutil.findcmd(name, table, strict=unknowncmd) except error.AmbiguousCommand, inst: # py3k fix: except vars can't be used outside the scope of the # except block, nor can be used inside a lambda. python issue4617 @@ -1501,7 +1501,8 @@ # check if it's an invalid alias and display its error if it is if getattr(entry[0], 'badalias', False): - entry[0](ui) + if not unknowncmd: + entry[0](ui) return # synopsis @@ -1592,10 +1593,13 @@ def helpext(name): try: mod = extensions.find(name) + doc = gettext(mod.__doc__) or _('no help text available') except KeyError: - raise error.UnknownCommand(name) - - doc = gettext(mod.__doc__) or _('no help text available') + mod = None + doc = extensions.disabledext(name) + if not doc: + raise error.UnknownCommand(name) + if '\n' not in doc: head, tail = doc, "" else: @@ -1605,17 +1609,36 @@ ui.write(minirst.format(tail, textwidth)) ui.status('\n\n') - try: - ct = mod.cmdtable - except AttributeError: - ct = {} - - modcmds = set([c.split('|', 1)[0] for c in ct]) - helplist(_('list of commands:\n\n'), modcmds.__contains__) + if mod: + try: + ct = mod.cmdtable + except AttributeError: + ct = {} + modcmds = set([c.split('|', 1)[0] for c in ct]) + helplist(_('list of commands:\n\n'), modcmds.__contains__) + else: + ui.write(_('use "hg help extensions" for information on enabling ' + 'extensions\n')) + + def helpextcmd(name): + cmd, ext, mod = extensions.disabledcmd(name, ui.config('ui', 'strict')) + doc = gettext(mod.__doc__).splitlines()[0] + + msg = help.listexts(_("'%s' is provided by the following " + "extension:") % cmd, {ext: doc}, len(ext), + indent=4) + ui.write(minirst.format(msg, textwidth)) + ui.write('\n\n') + ui.write(_('use "hg help extensions" for information on enabling ' + 'extensions\n')) if name and name != 'shortlist': i = None - for f in (helptopic, helpcmd, helpext): + if unknowncmd: + queries = (helpextcmd,) + else: + queries = (helptopic, helpcmd, helpext, helpextcmd) + for f in queries: try: f(name) i = None