# HG changeset patch # User Patrick Mezard # Date 1260723984 -3600 # Node ID 1a114aca93fa2bda8f89348d99b7fed362728152 # Parent e400a511e63af2eb011931bd43437ea201c61e62 cmdutil: extract file changes closures into templatekw diff -r e400a511e63a -r 1a114aca93fa mercurial/cmdutil.py --- a/mercurial/cmdutil.py Sun Dec 13 18:06:23 2009 +0100 +++ b/mercurial/cmdutil.py Sun Dec 13 18:06:24 2009 +0100 @@ -820,19 +820,6 @@ 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) - - files = [] - def getfiles(): - if not files: - files[:] = self.repo.status(ctx.parents()[0].node(), - ctx.node())[:3] - return files - def showmods(repo, ctx, templ, **args): - return showlist(templ, 'file_mod', getfiles()[0], **args) - def showadds(repo, ctx, templ, **args): - return showlist(templ, 'file_add', getfiles()[1], **args) - def showdels(repo, ctx, templ, **args): - return showlist(templ, 'file_del', getfiles()[2], **args) def showlatesttag(repo, ctx, templ, **args): return self._latesttaginfo(ctx.rev())[2] @@ -840,9 +827,6 @@ return self._latesttaginfo(ctx.rev())[1] defprops = { - 'file_adds': showadds, - 'file_dels': showdels, - 'file_mods': showmods, 'file_copies': showcopies, 'parents': showparents, 'latesttag': showlatesttag, @@ -854,6 +838,7 @@ props['templ'] = self.t props['ctx'] = ctx props['repo'] = self.repo + props['revcache'] = {} # find correct templates for current mode diff -r e400a511e63a -r 1a114aca93fa mercurial/templatekw.py --- a/mercurial/templatekw.py Sun Dec 13 18:06:23 2009 +0100 +++ b/mercurial/templatekw.py Sun Dec 13 18:06:24 2009 +0100 @@ -69,6 +69,12 @@ if endname in templ: yield templ(endname, **args) +def getfiles(repo, ctx, revcache): + if 'files' not in revcache: + revcache['files'] = repo.status(ctx.parents()[0].node(), + ctx.node())[:3] + return revcache['files'] + def showauthor(repo, ctx, templ, **args): return ctx.user() @@ -99,6 +105,15 @@ args.update(dict(key=key, value=value)) yield templ('extra', **args) +def showfileadds(repo, ctx, templ, revcache, **args): + return showlist(templ, 'file_add', getfiles(repo, ctx, revcache)[1], **args) + +def showfiledels(repo, ctx, templ, revcache, **args): + return showlist(templ, 'file_del', getfiles(repo, ctx, revcache)[2], **args) + +def showfilemods(repo, ctx, templ, revcache, **args): + return showlist(templ, 'file_mod', getfiles(repo, ctx, revcache)[0], **args) + def showfiles(repo, ctx, templ, **args): return showlist(templ, 'file', ctx.files(), **args) @@ -124,6 +139,9 @@ 'desc': showdescription, 'diffstat': showdiffstat, 'extras': showextras, + 'file_adds': showfileadds, + 'file_dels': showfiledels, + 'file_mods': showfilemods, 'files': showfiles, 'manifest': showmanifest, 'node': shownode, diff -r e400a511e63a -r 1a114aca93fa tests/test-template-engine --- a/tests/test-template-engine Sun Dec 13 18:06:23 2009 +0100 +++ b/tests/test-template-engine Sun Dec 13 18:06:24 2009 +0100 @@ -11,7 +11,7 @@ def process(self, t, map): tmpl = self.loader(t) for k, v in map.iteritems(): - if k in ('templ', 'ctx', 'repo'): + if k in ('templ', 'ctx', 'repo', 'revcache'): continue if hasattr(v, '__call__'): v = v(**map)