diff --git a/mercurial/hgweb/webcommands.py b/mercurial/hgweb/webcommands.py --- a/mercurial/hgweb/webcommands.py +++ b/mercurial/hgweb/webcommands.py @@ -242,7 +242,7 @@ def changelog(web, req, tmpl, shortlog=F pos = end - 1 parity = paritygen(web.stripecount, offset=start - end) - changenav = webutil.revnavgen(pos, revcount, count, web.repo.changectx) + changenav = webutil.revnav().gen(pos, revcount, count, web.repo.changectx) return tmpl(shortlog and 'shortlog' or 'changelog', changenav=changenav, node=ctx.hex(), rev=pos, changesets=count, @@ -772,7 +772,7 @@ def filelog(web, req, tmpl): yield e nodefunc = lambda x: fctx.filectx(fileid=x) - nav = webutil.revnavgen(end - 1, revcount, count, nodefunc) + nav = webutil.revnav().gen(end - 1, revcount, count, nodefunc) return tmpl("filelog", file=f, node=fctx.hex(), nav=nav, entries=lambda **x: entries(latestonly=False, **x), latestentry=lambda **x: entries(latestonly=True, **x), @@ -851,7 +851,7 @@ def graph(web, req, tmpl): uprev = min(max(0, count - 1), rev + revcount) downrev = max(0, rev - revcount) - changenav = webutil.revnavgen(pos, revcount, count, web.repo.changectx) + changenav = webutil.revnav().gen(pos, revcount, count, web.repo.changectx) dag = graphmod.dagwalker(web.repo, range(start, end)[::-1]) tree = list(graphmod.colored(dag, web.repo)) diff --git a/mercurial/hgweb/webutil.py b/mercurial/hgweb/webutil.py --- a/mercurial/hgweb/webutil.py +++ b/mercurial/hgweb/webutil.py @@ -39,41 +39,43 @@ def _navseq(step, firststep=None): yield 3 * step step *= 10 -def revnavgen(pos, pagelen, limit, nodefunc): - """computes label and revision id for navigation link +class revnav(object): - :pos: is the revision relative to which we generate navigation. - :pagelen: the size of each navigation page - :limit: how far shall we link - :nodefun: factory for a changectx from a revision + def gen(self, pos, pagelen, limit, nodefunc): + """computes label and revision id for navigation link - The return is: - - a single element tuple - - containing a dictionary with a `before` and `after` key - - values are generator functions taking an arbitrary number of kwargs - - yield items are dictionaries with `label` and `node` keys - """ + :pos: is the revision relative to which we generate navigation. + :pagelen: the size of each navigation page + :limit: how far shall we link + :nodefun: factory for a changectx from a revision - navbefore = [] - navafter = [] + The return is: + - a single element tuple + - containing a dictionary with a `before` and `after` key + - values are generator functions taking arbitrary number of kwargs + - yield items are dictionaries with `label` and `node` keys + """ - for f in _navseq(1, pagelen): - if f > limit: - break - if pos + f < limit: - navafter.append(("+%d" % f, hex(nodefunc(pos + f).node()))) - if pos - f >= 0: - navbefore.insert(0, ("-%d" % f, hex(nodefunc(pos - f).node()))) + navbefore = [] + navafter = [] - navafter.append(("tip", "tip")) - try: - navbefore.insert(0, ("(0)", hex(nodefunc(0).node()))) - except error.RepoError: - pass + for f in _navseq(1, pagelen): + if f > limit: + break + if pos + f < limit: + navafter.append(("+%d" % f, hex(nodefunc(pos + f).node()))) + if pos - f >= 0: + navbefore.insert(0, ("-%d" % f, hex(nodefunc(pos - f).node()))) - data = lambda i: {"label": i[0], "node": i[1]} - return ({'before': lambda **map: (data(i) for i in navbefore), - 'after': lambda **map: (data(i) for i in navafter)},) + navafter.append(("tip", "tip")) + try: + navbefore.insert(0, ("(0)", hex(nodefunc(0).node()))) + except error.RepoError: + pass + + data = lambda i: {"label": i[0], "node": i[1]} + return ({'before': lambda **map: (data(i) for i in navbefore), + 'after': lambda **map: (data(i) for i in navafter)},) def _siblings(siblings=[], hiderev=None): siblings = [s for s in siblings if s.node() != nullid]