# HG changeset patch # User Matt Harbison # Date 1545976262 18000 # Node ID c81bb97b0cac8d5701856b3f5fb72c4ad4731ae0 # Parent 8f40e21ca8420847d27fb580fda0a613ffc04008 exthelper: add some examples for using registrar aliases Maybe it's my general lack of python knowledge, but how to use these would be way too obscure for me otherwise. diff -r 8f40e21ca842 -r c81bb97b0cac mercurial/exthelper.py --- a/mercurial/exthelper.py Thu Dec 27 23:46:35 2018 -0500 +++ b/mercurial/exthelper.py Fri Dec 28 00:51:02 2018 -0500 @@ -21,10 +21,57 @@ class exthelper(object): """Helper for modular extension setup - A single helper should be instantiated for each extension. Helper - methods are then used as decorators for various purpose. + A single helper should be instantiated for each module of an + extension, where a command or function needs to be wrapped, or a + command, extension hook, fileset, revset or template needs to be + registered. Helper methods are then used as decorators for + these various purposes. If an extension spans multiple modules, + all helper instances should be merged in the main module. All decorators return the original function and may be chained. + + Aside from the helper functions with examples below, several + registrar method aliases are available for adding commands, + configitems, filesets, revsets, and templates. Simply decorate + the appropriate methods, and assign the corresponding exthelper + variable to a module level variable of the extension. The + extension loading mechanism will handle the rest. + + example:: + + # ext.py + eh = exthelper.exthelper() + + # As needed: + cmdtable = eh.cmdtable + configtable = eh.configtable + filesetpredicate = eh.filesetpredicate + revsetpredicate = eh.revsetpredicate + templatekeyword = eh.templatekeyword + + @eh.command('mynewcommand', + [('r', 'rev', [], _('operate on these revisions'))], + _('-r REV...'), + helpcategory=command.CATEGORY_XXX) + def newcommand(ui, repo, *revs, **opts): + # implementation goes here + + eh.configitem('experimental', 'foo', + default=False, + ) + + @eh.filesetpredicate('lfs()') + def filesetbabar(mctx, x): + return mctx.predicate(...) + + @eh.revsetpredicate('hidden') + def revsetbabar(repo, subset, x): + args = revset.getargs(x, 0, 0, 'babar accept no argument') + return [r for r in subset if 'babar' in repo[r].description()] + + @eh.templatekeyword('babar') + def kwbabar(ctx): + return 'babar' """ def __init__(self):