Mercurial > hg
changeset 10054:1a85861f59af
cmdutil: extract ctx dependent closures into templatekw
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Sun, 13 Dec 2009 18:06:23 +0100 |
parents | 5c5c6295533d |
children | e400a511e63a |
files | mercurial/cmdutil.py mercurial/templatekw.py tests/test-template-engine |
diffstat | 3 files changed, 61 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/cmdutil.py Sun Dec 13 18:06:23 2009 +0100 +++ b/mercurial/cmdutil.py Sun Dec 13 18:06:23 2009 +0100 @@ -812,28 +812,12 @@ showlist = templatekw.showlist - def showbranches(templ, **args): - branch = ctx.branch() - if branch != 'default': - branch = encoding.tolocal(branch) - return showlist(templ, 'branch', [branch], plural='branches', - **args) - - def showparents(templ, **args): + def showparents(ctx, templ, **args): parents = [[('rev', p.rev()), ('node', p.hex())] for p in self._meaningful_parentrevs(ctx)] return showlist(templ, 'parent', parents, **args) - def showtags(templ, **args): - return showlist(templ, 'tag', ctx.tags(), **args) - - def showextras(templ, **args): - for key, value in sorted(ctx.extra().items()): - args = args.copy() - args.update(dict(key=key, value=value)) - yield templ('extra', **args) - - def showcopies(templ, **args): + def showcopies(ctx, templ, **args): c = [{'name': x[0], 'source': x[1]} for x in copies] return showlist(templ, 'file_copy', c, plural='file_copies', **args) @@ -843,21 +827,19 @@ files[:] = self.repo.status(ctx.parents()[0].node(), ctx.node())[:3] return files - def showfiles(templ, **args): - return showlist(templ, 'file', ctx.files(), **args) - def showmods(templ, **args): + def showmods(ctx, templ, **args): return showlist(templ, 'file_mod', getfiles()[0], **args) - def showadds(templ, **args): + def showadds(ctx, templ, **args): return showlist(templ, 'file_add', getfiles()[1], **args) - def showdels(templ, **args): + def showdels(ctx, templ, **args): return showlist(templ, 'file_del', getfiles()[2], **args) - def showmanifest(templ, **args): + def showmanifest(ctx, templ, **args): args = args.copy() args.update(dict(rev=self.repo.manifest.rev(ctx.changeset()[0]), node=hex(ctx.changeset()[0]))) return templ('manifest', **args) - def showdiffstat(templ, **args): + def showdiffstat(ctx, templ, **args): diff = patch.diff(self.repo, ctx.parents()[0].node(), ctx.node()) files, adds, removes = 0, 0, 0 for i in patch.diffstatdata(util.iterlines(diff)): @@ -866,34 +848,27 @@ removes += i[2] return '%s: +%s/-%s' % (files, adds, removes) - def showlatesttag(templ, **args): + def showlatesttag(ctx, templ, **args): return self._latesttaginfo(ctx.rev())[2] - def showlatesttagdistance(templ, **args): + def showlatesttagdistance(ctx, templ, **args): return self._latesttaginfo(ctx.rev())[1] defprops = { - 'author': ctx.user(), - 'branches': showbranches, - 'date': ctx.date(), - 'desc': ctx.description().strip(), 'file_adds': showadds, 'file_dels': showdels, 'file_mods': showmods, - 'files': showfiles, 'file_copies': showcopies, 'manifest': showmanifest, - 'node': ctx.hex(), 'parents': showparents, - 'rev': ctx.rev(), - 'tags': showtags, - 'extras': showextras, 'diffstat': showdiffstat, 'latesttag': showlatesttag, 'latesttagdistance': showlatesttagdistance, } props = props.copy() + props.update(templatekw.keywords) props.update(defprops) props['templ'] = self.t + props['ctx'] = ctx # find correct templates for current mode
--- a/mercurial/templatekw.py Sun Dec 13 18:06:23 2009 +0100 +++ b/mercurial/templatekw.py Sun Dec 13 18:06:23 2009 +0100 @@ -5,6 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. +import encoding def showlist(templ, name, values, plural=None, **args): '''expand set of values. @@ -67,3 +68,48 @@ if endname in templ: yield templ(endname, **args) +def showauthor(ctx, templ, **args): + return ctx.user() + +def showbranches(ctx, templ, **args): + branch = ctx.branch() + if branch != 'default': + branch = encoding.tolocal(branch) + return showlist(templ, 'branch', [branch], plural='branches', **args) + +def showdate(ctx, templ, **args): + return ctx.date() + +def showdescription(ctx, templ, **args): + return ctx.description().strip() + +def showextras(ctx, templ, **args): + for key, value in sorted(ctx.extra().items()): + args = args.copy() + args.update(dict(key=key, value=value)) + yield templ('extra', **args) + +def showfiles(ctx, templ, **args): + return showlist(templ, 'file', ctx.files(), **args) + +def shownode(ctx, templ, **args): + return ctx.hex() + +def showrev(ctx, templ, **args): + return ctx.rev() + +def showtags(ctx, templ, **args): + return showlist(templ, 'tag', ctx.tags(), **args) + +keywords = { + 'author': showauthor, + 'branches': showbranches, + 'date': showdate, + 'desc': showdescription, + 'extras': showextras, + 'files': showfiles, + 'node': shownode, + 'rev': showrev, + 'tags': showtags, +} +
--- a/tests/test-template-engine Sun Dec 13 18:06:23 2009 +0100 +++ b/tests/test-template-engine Sun Dec 13 18:06:23 2009 +0100 @@ -11,6 +11,10 @@ def process(self, t, map): tmpl = self.loader(t) for k, v in map.iteritems(): + if k in ('templ', 'ctx'): + continue + if hasattr(v, '__call__'): + v = v(**map) v = templater.stringify(v) tmpl = tmpl.replace('{{%s}}' % k, v) yield tmpl