# HG changeset patch # User Martin von Zweigbergk # Date 2020-11-12 22:07:34 # Node ID dbc574726ea467b9895c4e824ba82da71501e7aa # Parent a96456205061ae6b9995084388823d0a461440bb templates: define a {onelinesummary} keyword It is sometimes useful to be able to use the configured `command-template.oneline-summary` in higher-level templates. For example, I would like to use it in an internal template that lists commits in a "review unit" (kind of a pull request). This patch adds support for that. We may want to define a way of formatting a context using a command-specific override (from `command-templates.oneline-summary.`), but that will have to be a template function instead. I don't plan to do that, but I'm mentioning it now in case reviewers would prefer that we use a no-arg function (i.e. `{onelinesummary()}`) already today to prepare for that. Differential Revision: https://phab.mercurial-scm.org/D9314 diff --git a/mercurial/templatekw.py b/mercurial/templatekw.py --- a/mercurial/templatekw.py +++ b/mercurial/templatekw.py @@ -634,6 +634,19 @@ def showobsolete(context, mapping): return b'' +@templatekeyword(b'onelinesummary', requires={b'ui', b'ctx'}) +def showonelinesummary(context, mapping): + """String. A one-line summary for the ctx (not including trailing newline). + The default template be overridden in command-templates.oneline-summary.""" + # Avoid cycle: + # mercurial.cmdutil -> mercurial.templatekw -> mercurial.cmdutil + from . import cmdutil + + ui = context.resource(mapping, b'ui') + ctx = context.resource(mapping, b'ctx') + return cmdutil.format_changeset_summary(ui, ctx) + + @templatekeyword(b'path', requires={b'fctx'}) def showpath(context, mapping): """String. Repository-absolute path of the current file. (EXPERIMENTAL)""" diff --git a/tests/test-template-keywords.t b/tests/test-template-keywords.t --- a/tests/test-template-keywords.t +++ b/tests/test-template-keywords.t @@ -114,6 +114,30 @@ Check that {phase} works correctly on pa | o 0 (public): -1 (public) -1 (public) +Test {onelinesummary} + + $ hg log -G -T '{onelinesummary}' + @ 8:95c24699272e tip "third" + | + o 7:29114dbae42b "second" + + o 6:d41e714fe50d "merge" + |\ + | o 5:13207e5a10d9 "new head" + | | + o | 4:bbe44766e73d "new branch" + |/ + o 3:10e46f2dcbf4 "no user, no domain" + | + o 2:97054abb4ab8 "no person" + | + o 1:b608e9d1a3f0 "other 1" + | + o 0:1e4e1b8f71e0 "line 1" + + $ hg log -T '{onelinesummary}' -r 0 \ + > --config command-templates.oneline-summary='{rev} - {desc}' + 0 - line 1 (no-eol) Keys work: