# HG changeset patch # User Alexander Plavin # Date 1378459857 -14400 # Node ID ab5442f45441b055650e90aa13167ff47df66161 # Parent f08e542ce9189b4c7611046a957be9983e402577 hgweb: always compute all entries and latestentry in changelog Get the whole list of entries before rendering instead of using lazy evaluation. This doesn't affect the performance for usual case when the entries are shown anyway. When both entries and latestentry are used, this performs unnoticeably faster, and for pages which use only latestentry (quite uncommon case) it would be a bit slower. This change will make it possible to get the first entry of the next page easily without computing the list twice. diff -r f08e542ce918 -r ab5442f45441 mercurial/hgweb/webcommands.py --- a/mercurial/hgweb/webcommands.py Tue Sep 17 17:42:13 2013 +0200 +++ b/mercurial/hgweb/webcommands.py Fri Sep 06 13:30:57 2013 +0400 @@ -259,12 +259,10 @@ else: ctx = web.repo['tip'] - def changelist(latestonly): + def changelist(): revs = [] if pos != -1: revs = web.repo.changelog.revs(pos, 0) - if latestonly: - revs = (revs.next(),) curcount = 0 for i in revs: ctx = web.repo[i] @@ -309,10 +307,13 @@ changenav = webutil.revnav(web.repo).gen(pos, revcount, count) + entries = list(changelist()) + latestentry = entries[:1] + return tmpl(shortlog and 'shortlog' or 'changelog', changenav=changenav, node=ctx.hex(), rev=pos, changesets=count, - entries=lambda **x: changelist(latestonly=False), - latestentry=lambda **x: changelist(latestonly=True), + entries=entries, + latestentry=latestentry, archives=web.archivelist("tip"), revcount=revcount, morevars=morevars, lessvars=lessvars, query=query)