[PATCH 2 of 3 V2 STABLE] hgweb: fix incorrect way to count revisions in log (issue3977)

Alexander Plavin me at aplavin.ru
Mon Jul 22 09:54:26 UTC 2013


# HG changeset patch
# User Alexander Plavin <me at aplavin.ru>
# Date 1374322072 -14400
#      Sat Jul 20 16:07:52 2013 +0400
# Node ID ca4c805ec72ac3bedb7a3e661ea236b7704a97fe
# Parent  82096c966790ec607efb16ebff2cfa53c643b700
hgweb: fix incorrect way to count revisions in log (issue3977)

Actual amount of revisions is used now instead of their numbers in the repo
befor to deal with skipped numbers correctly.
This iterates starting from the newest revision (which is shown on top)
yielding up to the specified count, instead of the reversed order used before.
Effect of this change on efficiency is negligible, when the same changesets are
returned.

diff -r 82096c966790 -r ca4c805ec72a mercurial/hgweb/webcommands.py
--- a/mercurial/hgweb/webcommands.py	Sat Jul 20 16:05:59 2013 +0400
+++ b/mercurial/hgweb/webcommands.py	Sat Jul 20 16:07:52 2013 +0400
@@ -200,38 +200,31 @@
             return _search(web, req, tmpl) # XXX redirect to 404 page?
 
     def changelist(latestonly, **map):
-        l = [] # build a list in forward order for efficiency
-        revs = []
-        if start < end:
-            revs = web.repo.changelog.revs(start, end - 1)
+        revs = web.repo.changelog.revs(pos, count=-revcount)
         if latestonly:
-            for r in revs:
-                pass
-            revs = (r,)
+            revs = (next(revs),)
         for i in revs:
             ctx = web.repo[i]
             n = ctx.node()
             showtags = webutil.showtag(web.repo, tmpl, 'changelogtag', n)
             files = webutil.listfilediffs(tmpl, ctx.files(), n, web.maxfiles)
 
-            l.append({"parity": parity.next(),
-                      "author": ctx.user(),
-                      "parent": webutil.parents(ctx, i - 1),
-                      "child": webutil.children(ctx, i + 1),
-                      "changelogtag": showtags,
-                      "desc": ctx.description(),
-                      "extra": ctx.extra(),
-                      "date": ctx.date(),
-                      "files": files,
-                      "rev": i,
-                      "node": hex(n),
-                      "tags": webutil.nodetagsdict(web.repo, n),
-                      "bookmarks": webutil.nodebookmarksdict(web.repo, n),
-                      "inbranch": webutil.nodeinbranch(web.repo, ctx),
-                      "branches": webutil.nodebranchdict(web.repo, ctx)
-                     })
-        for e in reversed(l):
-            yield e
+            yield {"parity": parity.next(),
+                   "author": ctx.user(),
+                   "parent": webutil.parents(ctx, i - 1),
+                   "child": webutil.children(ctx, i + 1),
+                   "changelogtag": showtags,
+                   "desc": ctx.description(),
+                   "extra": ctx.extra(),
+                   "date": ctx.date(),
+                   "files": files,
+                   "rev": i,
+                   "node": hex(n),
+                   "tags": webutil.nodetagsdict(web.repo, n),
+                   "bookmarks": webutil.nodebookmarksdict(web.repo, n),
+                   "inbranch": webutil.nodeinbranch(web.repo, ctx),
+                   "branches": webutil.nodebranchdict(web.repo, ctx)
+            }
 
     revcount = shortlog and web.maxshortchanges or web.maxchanges
     if 'revcount' in req.form:
@@ -246,9 +239,7 @@
 
     count = len(web.repo)
     pos = ctx.rev()
-    start = max(0, pos - revcount + 1)
-    end = pos + 1
-    parity = paritygen(web.stripecount, offset=start - end)
+    parity = paritygen(web.stripecount)
 
     changenav = webutil.revnav(web.repo).gen(pos, revcount, count)
 



More information about the Mercurial-devel mailing list