# HG changeset patch # User Patrick Mezard # Date 2009-12-13 17:06:23 # Node ID e400a511e63af2eb011931bd43437ea201c61e62 # Parent 1a85861f59af94eee7ff56cf636ae12cb83ef2f9 cmdutil: extract repo dependent closures in templatekw diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -812,12 +812,12 @@ class changeset_templater(changeset_prin showlist = templatekw.showlist - def showparents(ctx, templ, **args): + def showparents(repo, ctx, templ, **args): parents = [[('rev', p.rev()), ('node', p.hex())] for p in self._meaningful_parentrevs(ctx)] return showlist(templ, 'parent', parents, **args) - def showcopies(ctx, templ, **args): + def showcopies(repo, ctx, templ, **args): c = [{'name': x[0], 'source': x[1]} for x in copies] return showlist(templ, 'file_copy', c, plural='file_copies', **args) @@ -827,40 +827,24 @@ class changeset_templater(changeset_prin files[:] = self.repo.status(ctx.parents()[0].node(), ctx.node())[:3] return files - def showmods(ctx, templ, **args): + def showmods(repo, ctx, templ, **args): return showlist(templ, 'file_mod', getfiles()[0], **args) - def showadds(ctx, templ, **args): + def showadds(repo, ctx, templ, **args): return showlist(templ, 'file_add', getfiles()[1], **args) - def showdels(ctx, templ, **args): + def showdels(repo, ctx, templ, **args): return showlist(templ, 'file_del', getfiles()[2], **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(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)): - files += 1 - adds += i[1] - removes += i[2] - return '%s: +%s/-%s' % (files, adds, removes) - - def showlatesttag(ctx, templ, **args): + + def showlatesttag(repo, ctx, templ, **args): return self._latesttaginfo(ctx.rev())[2] - def showlatesttagdistance(ctx, templ, **args): + def showlatesttagdistance(repo, ctx, templ, **args): return self._latesttaginfo(ctx.rev())[1] defprops = { 'file_adds': showadds, 'file_dels': showdels, 'file_mods': showmods, - 'file_copies': showcopies, - 'manifest': showmanifest, - 'parents': showparents, - 'diffstat': showdiffstat, + 'file_copies': showcopies, + 'parents': showparents, 'latesttag': showlatesttag, 'latesttagdistance': showlatesttagdistance, } @@ -869,6 +853,7 @@ class changeset_templater(changeset_prin props.update(defprops) props['templ'] = self.t props['ctx'] = ctx + props['repo'] = self.repo # find correct templates for current mode diff --git a/mercurial/templatekw.py b/mercurial/templatekw.py --- a/mercurial/templatekw.py +++ b/mercurial/templatekw.py @@ -5,7 +5,8 @@ # 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 +from node import hex +import encoding, patch, util def showlist(templ, name, values, plural=None, **args): '''expand set of values. @@ -68,37 +69,52 @@ def showlist(templ, name, values, plural if endname in templ: yield templ(endname, **args) -def showauthor(ctx, templ, **args): +def showauthor(repo, ctx, templ, **args): return ctx.user() -def showbranches(ctx, templ, **args): +def showbranches(repo, 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): +def showdate(repo, ctx, templ, **args): return ctx.date() -def showdescription(ctx, templ, **args): +def showdescription(repo, ctx, templ, **args): return ctx.description().strip() -def showextras(ctx, templ, **args): +def showdiffstat(repo, ctx, templ, **args): + diff = patch.diff(repo, ctx.parents()[0].node(), ctx.node()) + files, adds, removes = 0, 0, 0 + for i in patch.diffstatdata(util.iterlines(diff)): + files += 1 + adds += i[1] + removes += i[2] + return '%s: +%s/-%s' % (files, adds, removes) + +def showextras(repo, 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): +def showfiles(repo, ctx, templ, **args): return showlist(templ, 'file', ctx.files(), **args) -def shownode(ctx, templ, **args): +def showmanifest(repo, ctx, templ, **args): + args = args.copy() + args.update(dict(rev=repo.manifest.rev(ctx.changeset()[0]), + node=hex(ctx.changeset()[0]))) + return templ('manifest', **args) + +def shownode(repo, ctx, templ, **args): return ctx.hex() -def showrev(ctx, templ, **args): +def showrev(repo, ctx, templ, **args): return ctx.rev() -def showtags(ctx, templ, **args): +def showtags(repo, ctx, templ, **args): return showlist(templ, 'tag', ctx.tags(), **args) keywords = { @@ -106,8 +122,10 @@ keywords = { 'branches': showbranches, 'date': showdate, 'desc': showdescription, + 'diffstat': showdiffstat, 'extras': showextras, 'files': showfiles, + 'manifest': showmanifest, 'node': shownode, 'rev': showrev, 'tags': showtags, diff --git a/tests/test-template-engine b/tests/test-template-engine --- a/tests/test-template-engine +++ b/tests/test-template-engine @@ -11,7 +11,7 @@ class mytemplater(object): def process(self, t, map): tmpl = self.loader(t) for k, v in map.iteritems(): - if k in ('templ', 'ctx'): + if k in ('templ', 'ctx', 'repo'): continue if hasattr(v, '__call__'): v = v(**map)