[PATCH 03 of 22 V2-Series-D] hgweb: pass nodefunc to the revnav object
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Mon Jan 14 14:35:35 CST 2013
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at logilab.fr>
# Date 1357840777 -3600
# Node ID 5b869199ef7c34866bce802b43d1764b02e505ab
# Parent f3a21139337faae5dd711516b21e7678c1c703ce
hgweb: pass nodefunc to the revnav object
The issue between hgweb and filtering lay in this function. Moving it into the
object itself helps to abstract the erroneous bit.
diff --git a/mercurial/hgweb/webcommands.py b/mercurial/hgweb/webcommands.py
--- a/mercurial/hgweb/webcommands.py
+++ b/mercurial/hgweb/webcommands.py
@@ -240,11 +240,11 @@ def changelog(web, req, tmpl, shortlog=F
start = max(0, pos - revcount + 1)
end = min(count, start + revcount)
pos = end - 1
parity = paritygen(web.stripecount, offset=start - end)
- changenav = webutil.revnav().gen(pos, revcount, count, web.repo.changectx)
+ changenav = webutil.revnav(web.repo.changectx).gen(pos, revcount, count)
return tmpl(shortlog and 'shortlog' or 'changelog', changenav=changenav,
node=ctx.hex(), rev=pos, changesets=count,
entries=lambda **x: changelist(latestonly=False, **x),
latestentry=lambda **x: changelist(latestonly=True, **x),
@@ -770,11 +770,11 @@ def filelog(web, req, tmpl):
"branches": webutil.nodebranchdict(repo, iterfctx)})
for e in reversed(l):
yield e
nodefunc = lambda x: fctx.filectx(fileid=x)
- nav = webutil.revnav().gen(end - 1, revcount, count, nodefunc)
+ nav = webutil.revnav(nodefunc).gen(end - 1, revcount, count)
return tmpl("filelog", file=f, node=fctx.hex(), nav=nav,
entries=lambda **x: entries(latestonly=False, **x),
latestentry=lambda **x: entries(latestonly=True, **x),
revcount=revcount, morevars=morevars, lessvars=lessvars)
@@ -850,11 +850,11 @@ def graph(web, req, tmpl):
end = min(count, start + revcount)
pos = end - 1
uprev = min(max(0, count - 1), rev + revcount)
downrev = max(0, rev - revcount)
- changenav = webutil.revnav().gen(pos, revcount, count, web.repo.changectx)
+ changenav = webutil.revnav(web.repo.changectx).gen(pos, revcount, count)
dag = graphmod.dagwalker(web.repo, range(start, end)[::-1])
tree = list(graphmod.colored(dag, web.repo))
def getcolumns(tree):
diff --git a/mercurial/hgweb/webutil.py b/mercurial/hgweb/webutil.py
--- a/mercurial/hgweb/webutil.py
+++ b/mercurial/hgweb/webutil.py
@@ -24,17 +24,23 @@ def up(p):
return "/"
return up + "/"
class revnav(object):
- def gen(self, pos, pagelen, limit, nodefunc):
+ def __init__(self, nodefunc):
+ """Navigation generation object
+
+ :nodefun: factory for a changectx from a revision
+ """
+ self.nodefunc = nodefunc
+
+ def gen(self, pos, pagelen, limit):
"""computes label and revision id for navigation link
:pos: is the revision relative to which we generate navigation.
:pagelen: the size of each navigation pages
:limit: how far shall we link
- :nodefun: factory for a changectx from a revision
The return is:
- a single element tuple
- containing a dictionary with a `before` and `after` key
- values are generator function taking arbitrary number of kwargs
@@ -60,17 +66,19 @@ class revnav(object):
continue
if f > limit:
break
last = f
if pos + f < limit:
- navafter.append(("+%d" % f, hex(nodefunc(pos + f).node())))
+ navafter.append(("+%d" % f,
+ hex(self.nodefunc(pos + f).node())))
if pos - f >= 0:
- navbefore.insert(0, ("-%d" % f, hex(nodefunc(pos - f).node())))
+ navbefore.insert(0, ("-%d" % f,
+ hex(self.nodefunc(pos - f).node())))
navafter.append(("tip", "tip"))
try:
- navbefore.insert(0, ("(0)", hex(nodefunc('0').node())))
+ navbefore.insert(0, ("(0)", hex(self.nodefunc('0').node())))
except error.RepoError:
pass
def gen(l):
def f(**map):
More information about the Mercurial-devel
mailing list