[PATCH 10 of 11] hgweb: buffer lines by block in annotate

Denis Laxalde denis at laxalde.org
Wed Feb 22 10:10:04 EST 2017


# HG changeset patch
# User Denis Laxalde <denis.laxalde at logilab.fr>
# Date 1487769833 -3600
#      Wed Feb 22 14:23:53 2017 +0100
# Node ID 2029f766a989dc8739bd2e640f3511c441f4abc9
# Parent  2a5126051c337f38bd15862c3c5d96a83ab47acc
# EXP-Topic linerange-log/hgweb-filelog
hgweb: buffer lines by block in annotate

This will allow inserting the line range information on each line in following
patch.

diff --git a/mercurial/hgweb/webcommands.py b/mercurial/hgweb/webcommands.py
--- a/mercurial/hgweb/webcommands.py
+++ b/mercurial/hgweb/webcommands.py
@@ -913,30 +913,39 @@ def annotate(web, req, tmpl):
 
         previousrev = None
         blockparitygen = paritygen(1)
+        block = []
         for lineno, ((f, targetline), l) in enumerate(lines):
             rev = f.rev()
             if rev != previousrev:
+                # new block, yield lines from previous one
+                for linectx in block:
+                    yield linectx
+                block = []
                 blockhead = True
                 blockparity = next(blockparitygen)
             else:
                 blockhead = None
             previousrev = rev
-            yield {"parity": next(parity),
-                   "node": f.hex(),
-                   "rev": rev,
-                   "author": f.user(),
-                   "parents": parents(f),
-                   "desc": f.description(),
-                   "extra": f.extra(),
-                   "file": f.path(),
-                   "blockhead": blockhead,
-                   "blockparity": blockparity,
-                   "targetline": targetline,
-                   "line": l,
-                   "lineno": lineno + 1,
-                   "lineid": "l%d" % (lineno + 1),
-                   "linenumber": "% 6d" % (lineno + 1),
-                   "revdate": f.date()}
+            block.append({
+                "parity": next(parity),
+                "node": f.hex(),
+                "rev": rev,
+                "author": f.user(),
+                "parents": parents(f),
+                "desc": f.description(),
+                "extra": f.extra(),
+                "file": f.path(),
+                "blockhead": blockhead,
+                "blockparity": blockparity,
+                "targetline": targetline,
+                "line": l,
+                "lineno": lineno + 1,
+                "lineid": "l%d" % (lineno + 1),
+                "linenumber": "% 6d" % (lineno + 1),
+                "revdate": f.date(),
+            })
+        for linectx in block:
+            yield linectx
 
     return tmpl("fileannotate",
                 file=f,


More information about the Mercurial-devel mailing list