templatekw: fix join format of parents keyword (
issue5292)
Since the default joinfmt() can't process a dict of multiple keywords, we
need a dedicated joinfmt for showparents().
Unlike revset(), parents are formatted as '{rev}:{node|formatnode}' by default.
We copy the default formatting just like showextras() and showfilecopies() do.
--- a/mercurial/templatekw.py Fri Jul 22 22:00:46 2016 +0900
+++ b/mercurial/templatekw.py Fri Jul 22 22:12:12 2016 +0900
@@ -119,6 +119,16 @@
if endname in templ:
yield templ(endname, **args)
+def _formatrevnode(ctx):
+ """Format changeset as '{rev}:{node|formatnode}', which is the default
+ template provided by cmdutil.changeset_templater"""
+ repo = ctx.repo()
+ if repo.ui.debugflag:
+ hexnode = ctx.hex()
+ else:
+ hexnode = ctx.hex()[:12]
+ return '%d:%s' % (scmutil.intrev(ctx.rev()), hexnode)
+
def getfiles(repo, ctx, revcache):
if 'files' not in revcache:
revcache['files'] = repo.status(ctx.p1(), ctx)[:3]
@@ -523,7 +533,8 @@
('phase', p.phasestr())]
for p in pctxs]
f = _showlist('parent', parents, **args)
- return _hybrid(f, prevs, lambda x: {'ctx': repo[int(x)], 'revcache': {}})
+ return _hybrid(f, prevs, lambda x: {'ctx': repo[int(x)], 'revcache': {}},
+ lambda d: _formatrevnode(d['ctx']))
@templatekeyword('phase')
def showphase(repo, ctx, templ, **args):
--- a/tests/test-command-template.t Fri Jul 22 22:00:46 2016 +0900
+++ b/tests/test-command-template.t Fri Jul 22 22:12:12 2016 +0900
@@ -3438,6 +3438,16 @@
$ hg log -R ../a -T '{join(revset("parents(%d)", rev), ", ")}\n' -r6
4, 5
+on the other hand, parents are formatted as '{rev}:{node|formatnode}' by
+default. join() should agree with the default formatting:
+
+ $ hg log -R ../a -T '{join(parents, ", ")}\n' -r6
+ 5:13207e5a10d9, 4:bbe44766e73d
+
+ $ hg log -R ../a -T '{join(parents, ",\n")}\n' -r6 --debug
+ 5:13207e5a10d9fd28ec424934298e176197f2c67f,
+ 4:bbe44766e73d5f11ed2177f1838de10c53ef3e74
+
Test active bookmark templating
$ hg book foo