# HG changeset patch # User Anton Shestakov # Date 2015-11-10 15:02:59 # Node ID 41957e50e109949b8c77aa378ec8c5cdfe2de5ac # Parent 19c4b93cb7d61ae33202830265e42eacb8de9751 hgweb: compute changeset parents and children for log pages lazily Log pages, i.e. changelog, filelog and search results page computed children and parents for each changeset shown, because spartan hgweb style shows this info. Turns out, computing all this is heavy and also unnecessary for log pages in all other hgweb styles. Luckily, templates allow an easy way to do computations on demand: just pass the heavy part of code as a callable and it will be only called when needed. Here are some benchmarks on the mercurial repository (best of 3): time wget http://127.0.0.1:8021/ before: 0m0.050s after: 0m0.040s time wget http://127.0.0.1:8021/?revcount=960 before: 0m1.164s after: 0m0.389s time wget http://127.0.0.1:8021/log/tip/mercurial/commands.py before: 0m0.047s after: 0m0.042s time wget http://127.0.0.1:8021/log/tip/mercurial/commands.py?revcount=960 before: 0m0.830s after: 0m0.434s diff --git a/mercurial/hgweb/webcommands.py b/mercurial/hgweb/webcommands.py --- a/mercurial/hgweb/webcommands.py +++ b/mercurial/hgweb/webcommands.py @@ -264,8 +264,8 @@ def _search(web, req, tmpl): yield tmpl('searchentry', parity=parity.next(), author=ctx.user(), - parent=webutil.parents(ctx), - child=webutil.children(ctx), + parent=lambda **x: webutil.parents(ctx), + child=lambda **x: webutil.children(ctx), changelogtag=showtags, desc=ctx.description(), extra=ctx.extra(), @@ -1000,8 +1000,8 @@ def filelog(web, req, tmpl): "author": iterfctx.user(), "date": iterfctx.date(), "rename": webutil.renamelink(iterfctx), - "parent": webutil.parents(iterfctx), - "child": webutil.children(iterfctx), + "parent": lambda **x: webutil.parents(iterfctx), + "child": lambda **x: webutil.children(iterfctx), "desc": iterfctx.description(), "extra": iterfctx.extra(), "tags": webutil.nodetagsdict(repo, iterfctx.node()), diff --git a/mercurial/hgweb/webutil.py b/mercurial/hgweb/webutil.py --- a/mercurial/hgweb/webutil.py +++ b/mercurial/hgweb/webutil.py @@ -297,8 +297,8 @@ def changelistentry(web, ctx, tmpl): return { "author": ctx.user(), - "parent": parents(ctx, rev - 1), - "child": children(ctx, rev + 1), + "parent": lambda **x: parents(ctx, rev - 1), + "child": lambda **x: children(ctx, rev + 1), "changelogtag": showtags, "desc": ctx.description(), "extra": ctx.extra(),