# HG changeset patch # User Yuya Nishihara # Date 1513947578 -32400 # Node ID 7937850a523d64498d2b80fea8c34facd117dbd3 # Parent 69477bac89267f64dfbdadf255e811dfa8bd6877 hgweb: make templater mostly compatible with log templates Prepares for gradually switching templatekw.showsuccsandmarkers() to new API. This was a PoC showing how to reuse templatekw functions in hgweb. We could remove rev, node, author, etc. from the commonentry() table, but we'll have to carefully remove all corresponding symbols from webcommands.*(). Otherwise, we would face the issue5612. Still templatekw.keywords aren't exported. Otherwise some tests would fail because the atom template expects {files} to be empty in filelog, but templatekw.showfiles() provides the {files} implementation. diff -r 69477bac8926 -r 7937850a523d mercurial/hgweb/hgweb_mod.py --- a/mercurial/hgweb/hgweb_mod.py Sun Feb 25 14:42:18 2018 +0900 +++ b/mercurial/hgweb/hgweb_mod.py Fri Dec 22 21:59:38 2017 +0900 @@ -27,6 +27,7 @@ from .. import ( encoding, error, + formatter, hg, hook, profiling, @@ -197,7 +198,7 @@ return templatefilters.websub(text, self.websubtable) # create the templater - + # TODO: export all keywords: defaults = templatekw.keywords.copy() defaults = { 'url': req.url, 'logourl': logourl, @@ -212,9 +213,11 @@ 'style': style, 'nonce': self.nonce, } + tres = formatter.templateresources(self.repo.ui, self.repo) tmpl = templater.templater.frommapfile(mapfile, filters={'websub': websubfilter}, - defaults=defaults) + defaults=defaults, + resources=tres) return tmpl diff -r 69477bac8926 -r 7937850a523d mercurial/hgweb/webutil.py --- a/mercurial/hgweb/webutil.py Sun Feb 25 14:42:18 2018 +0900 +++ b/mercurial/hgweb/webutil.py Fri Dec 22 21:59:38 2017 +0900 @@ -352,8 +352,8 @@ def formatlinerange(fromline, toline): return '%d:%d' % (fromline + 1, toline) -def succsandmarkers(repo, ctx): - for item in templatekw.showsuccsandmarkers(repo, ctx): +def succsandmarkers(repo, ctx, **args): + for item in templatekw.showsuccsandmarkers(repo, ctx, **args): item['successors'] = _siblings(repo[successor] for successor in item['successors']) yield item @@ -361,6 +361,11 @@ def commonentry(repo, ctx): node = ctx.node() return { + # TODO: perhaps ctx.changectx() should be assigned if ctx is a + # filectx, but I'm not pretty sure if that would always work because + # fctx.parents() != fctx.changectx.parents() for example. + 'ctx': ctx, + 'revcache': {}, 'rev': ctx.rev(), 'node': hex(node), 'author': ctx.user(), @@ -369,7 +374,7 @@ 'extra': ctx.extra(), 'phase': ctx.phasestr(), 'obsolete': ctx.obsolete(), - 'succsandmarkers': lambda **x: succsandmarkers(repo, ctx), + 'succsandmarkers': succsandmarkers, 'instabilities': [{"instability": i} for i in ctx.instabilities()], 'branch': nodebranchnodefault(ctx), 'inbranch': nodeinbranch(repo, ctx),