diff mercurial/hgweb/webcommands.py @ 17318:7ac5800dbc8f stable

hgweb: fix graph view paging - Fix off-by-one error on displayed entries count in normal mode - Fix incorrect paging when the top revision was lower than revcount - Fix revcount not overriding web.maxshortchanges everywhere
author Patrick Mezard <patrick@mezard.eu>
date Sun, 29 Jul 2012 23:16:20 +0200
parents 06217d3cf8d9
children 7124f984dc8d
line wrap: on
line diff
--- a/mercurial/hgweb/webcommands.py	Sun Jul 29 19:44:57 2012 +0200
+++ b/mercurial/hgweb/webcommands.py	Sun Jul 29 23:16:20 2012 +0200
@@ -817,7 +817,9 @@
 
 def graph(web, req, tmpl):
 
-    rev = webutil.changectx(web.repo, req).rev()
+    ctx = webutil.changectx(web.repo, req)
+    rev = ctx.rev()
+
     bg_height = 39
     revcount = web.maxshortchanges
     if 'revcount' in req.form:
@@ -830,20 +832,17 @@
     morevars = copy.copy(tmpl.defaults['sessionvars'])
     morevars['revcount'] = revcount * 2
 
-    max_rev = len(web.repo) - 1
-    revcount = min(max_rev, revcount)
-    revnode = web.repo.changelog.node(rev)
-    revnode_hex = hex(revnode)
-    uprev = min(max_rev, rev + revcount)
+    count = len(web.repo)
+    pos = rev
+    start = max(0, pos - revcount + 1)
+    end = min(count, start + revcount)
+    pos = end - 1
+
+    uprev = min(max(0, count - 1), rev + revcount)
     downrev = max(0, rev - revcount)
-    count = len(web.repo)
-    changenav = webutil.revnavgen(rev, revcount, count, web.repo.changectx)
-    startrev = rev
-    # if starting revision is less than 60 set it to uprev
-    if rev < web.maxshortchanges:
-        startrev = uprev
+    changenav = webutil.revnavgen(pos, revcount, count, web.repo.changectx)
 
-    dag = graphmod.dagwalker(web.repo, range(startrev, downrev - 1, -1))
+    dag = graphmod.dagwalker(web.repo, range(start, end)[::-1])
     tree = list(graphmod.colored(dag, web.repo))
 
     def getcolumns(tree):
@@ -915,7 +914,7 @@
                 canvasheight=canvasheight, bg_height=bg_height,
                 jsdata=lambda **x: graphdata(True, **x),
                 nodes=lambda **x: graphdata(False, **x),
-                node=revnode_hex, changenav=changenav)
+                node=ctx.hex(), changenav=changenav)
 
 def _getdoc(e):
     doc = e[0].__doc__