comparison mercurial/hgweb/webcommands.py @ 20022:d85dfe211c71

hgweb: always compute all entries and latestentry in filelog This is the same thing which was done for changelog earlier, and it doesn't affect performance at all. This change will make it possible to get the first entry of the next page easily without computing the list twice.
author Alexander Plavin <alexander@plav.in>
date Sun, 10 Nov 2013 18:07:56 +0400
parents 4830763f825c
children 2771e59afac4
comparison
equal deleted inserted replaced
20021:4830763f825c 20022:d85dfe211c71
834 count = fctx.filerev() + 1 834 count = fctx.filerev() + 1
835 start = max(0, fctx.filerev() - revcount + 1) # first rev on this page 835 start = max(0, fctx.filerev() - revcount + 1) # first rev on this page
836 end = min(count, start + revcount) # last rev on this page 836 end = min(count, start + revcount) # last rev on this page
837 parity = paritygen(web.stripecount, offset=start - end) 837 parity = paritygen(web.stripecount, offset=start - end)
838 838
839 def entries(latestonly): 839 def entries():
840 l = [] 840 l = []
841 841
842 repo = web.repo 842 repo = web.repo
843 revs = repo.changelog.revs(start, end - 1) 843 revs = repo.changelog.revs(start, end - 1)
844 if latestonly:
845 for r in revs:
846 pass
847 revs = (r,)
848 for i in revs: 844 for i in revs:
849 iterfctx = fctx.filectx(i) 845 iterfctx = fctx.filectx(i)
850 846
851 l.append({"parity": parity.next(), 847 l.append({"parity": parity.next(),
852 "filerev": i, 848 "filerev": i,
866 "inbranch": webutil.nodeinbranch(repo, iterfctx), 862 "inbranch": webutil.nodeinbranch(repo, iterfctx),
867 "branches": webutil.nodebranchdict(repo, iterfctx)}) 863 "branches": webutil.nodebranchdict(repo, iterfctx)})
868 for e in reversed(l): 864 for e in reversed(l):
869 yield e 865 yield e
870 866
867 entries = list(entries())
868 latestentry = entries[:1]
869
871 revnav = webutil.filerevnav(web.repo, fctx.path()) 870 revnav = webutil.filerevnav(web.repo, fctx.path())
872 nav = revnav.gen(end - 1, revcount, count) 871 nav = revnav.gen(end - 1, revcount, count)
873 return tmpl("filelog", file=f, node=fctx.hex(), nav=nav, 872 return tmpl("filelog", file=f, node=fctx.hex(), nav=nav,
874 entries=lambda **x: entries(latestonly=False), 873 entries=entries,
875 latestentry=lambda **x: entries(latestonly=True), 874 latestentry=latestentry,
876 revcount=revcount, morevars=morevars, lessvars=lessvars) 875 revcount=revcount, morevars=morevars, lessvars=lessvars)
877 876
878 def archive(web, req, tmpl): 877 def archive(web, req, tmpl):
879 type_ = req.form.get('type', [None])[0] 878 type_ = req.form.get('type', [None])[0]
880 allowed = web.configlist("web", "allow_archive") 879 allowed = web.configlist("web", "allow_archive")