# HG changeset patch # User Pierre-Yves David # Date 1358337084 -3600 # Node ID bfba6d9541088dab56bca665e31fab9c2cb6af39 # Parent 683a76a073250dc6ee52b7a4fe4674551d0f6e66 hgweb: `limit` argument is actually `latestonly` renames and enforce The `limit` argument of several generator have only two possible values in practice: 0 and 1. We rename this parameter to `latestonly` and simplify it's handling. The simplification allows us to save fetching of data that we are sure to not consume. Having a function minimal function perimeter will helps future refactoring. diff -r 683a76a07325 -r bfba6d954108 mercurial/hgweb/webcommands.py --- a/mercurial/hgweb/webcommands.py Wed Jan 16 11:39:22 2013 -0600 +++ b/mercurial/hgweb/webcommands.py Wed Jan 16 12:51:24 2013 +0100 @@ -194,9 +194,13 @@ except error.RepoError: return _search(web, req, tmpl) # XXX redirect to 404 page? - def changelist(limit=0, **map): + def changelist(latestonly, **map): l = [] # build a list in forward order for efficiency - for i in xrange(start, end): + if latestonly: + revs = (end - 1,) + else: + revs = xrange(start, end) + for i in revs: ctx = web.repo[i] n = ctx.node() showtags = webutil.showtag(web.repo, tmpl, 'changelogtag', n) @@ -217,9 +221,6 @@ "inbranch": webutil.nodeinbranch(web.repo, ctx), "branches": webutil.nodebranchdict(web.repo, ctx) }) - if limit > 0: - l = l[-limit:] - for e in reversed(l): yield e @@ -245,8 +246,8 @@ return tmpl(shortlog and 'shortlog' or 'changelog', changenav=changenav, node=ctx.hex(), rev=pos, changesets=count, - entries=lambda **x: changelist(limit=0,**x), - latestentry=lambda **x: changelist(limit=1,**x), + entries=lambda **x: changelist(latestonly=False, **x), + latestentry=lambda **x: changelist(latestonly=True, **x), archives=web.archivelist("tip"), revcount=revcount, morevars=morevars, lessvars=lessvars) @@ -401,14 +402,13 @@ i = list(reversed(web.repo.tagslist())) parity = paritygen(web.stripecount) - def entries(notip=False, limit=0, **map): - count = 0 - for k, n in i: - if notip and k == "tip": - continue - if limit > 0 and count >= limit: - continue - count = count + 1 + def entries(notip, latestonly, **map): + t = i + if notip: + t = [(k, n) for k, n in i if k != "tip"] + if latestonly: + t = t[:1] + for k, n in t: yield {"parity": parity.next(), "tag": k, "date": web.repo[n].date(), @@ -416,20 +416,20 @@ return tmpl("tags", node=hex(web.repo.changelog.tip()), - entries=lambda **x: entries(False, 0, **x), - entriesnotip=lambda **x: entries(True, 0, **x), - latestentry=lambda **x: entries(True, 1, **x)) + entries=lambda **x: entries(False, False, **x), + entriesnotip=lambda **x: entries(True, False, **x), + latestentry=lambda **x: entries(True, True, **x)) def bookmarks(web, req, tmpl): i = web.repo._bookmarks.items() parity = paritygen(web.stripecount) - def entries(limit=0, **map): - count = 0 - for k, n in sorted(i): - if limit > 0 and count >= limit: - continue - count = count + 1 + def entries(latestonly, **map): + if latestonly: + t = [min(i)] + else: + t = sorted(i) + for k, n in t: yield {"parity": parity.next(), "bookmark": k, "date": web.repo[n].date(), @@ -437,8 +437,8 @@ return tmpl("bookmarks", node=hex(web.repo.changelog.tip()), - entries=lambda **x: entries(0, **x), - latestentry=lambda **x: entries(1, **x)) + entries=lambda **x: entries(latestonly=False, **x), + latestentry=lambda **x: entries(latestonly=True, **x)) def branches(web, req, tmpl): tips = [] @@ -741,11 +741,15 @@ end = min(count, start + revcount) # last rev on this page parity = paritygen(web.stripecount, offset=start - end) - def entries(limit=0, **map): + def entries(latestonly, **map): l = [] repo = web.repo - for i in xrange(start, end): + if latestonly: + revs = (end - 1,) + else: + revs = xrange(start, end) + for i in revs: iterfctx = fctx.filectx(i) l.append({"parity": parity.next(), @@ -764,18 +768,14 @@ "branch": webutil.nodebranchnodefault(iterfctx), "inbranch": webutil.nodeinbranch(repo, iterfctx), "branches": webutil.nodebranchdict(repo, iterfctx)}) - - if limit > 0: - l = l[-limit:] - for e in reversed(l): yield e nodefunc = lambda x: fctx.filectx(fileid=x) nav = webutil.revnavgen(end - 1, revcount, count, nodefunc) return tmpl("filelog", file=f, node=fctx.hex(), nav=nav, - entries=lambda **x: entries(limit=0, **x), - latestentry=lambda **x: entries(limit=1, **x), + entries=lambda **x: entries(latestonly=False, **x), + latestentry=lambda **x: entries(latestonly=True, **x), revcount=revcount, morevars=morevars, lessvars=lessvars) def archive(web, req, tmpl):