changeset 31671:aaebc80c9f1d

hgweb: add a 'linerange' parameter to webutil.diffs() This is used to filter out hunks based on their range (with respect to 'node2' for patch.diffhunks() call, i.e. 'ctx' for webutil.diffs()). This is the simplest way to filter diff hunks, here done on server side. Later on, it might be interesting to perform this filtering on client side and expose a "toggle" action to alternate between full and filtered diff.
author Denis Laxalde <denis.laxalde@logilab.fr>
date Mon, 13 Mar 2017 15:15:49 +0100
parents 5e6d44511317
children e540846c67e0
files mercurial/hgweb/webutil.py
diffstat 1 files changed, 6 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/hgweb/webutil.py	Thu Jan 19 17:41:00 2017 +0100
+++ b/mercurial/hgweb/webutil.py	Mon Mar 13 15:15:49 2017 +0100
@@ -434,7 +434,7 @@
     if len(files) > max:
         yield tmpl('fileellipses')
 
-def diffs(web, tmpl, ctx, basectx, files, style):
+def diffs(web, tmpl, ctx, basectx, files, style, linerange=None):
 
     def prettyprintlines(lines, blockno):
         for lineno, l in enumerate(lines, 1):
@@ -470,6 +470,11 @@
             header = header[1:]
         lines = [h + '\n' for h in header]
         for hunkrange, hunklines in hunks:
+            if linerange is not None and hunkrange is not None:
+                s1, l1, s2, l2 = hunkrange
+                lb, ub = linerange
+                if not (lb <= s2 < ub or lb < s2 + l2 <= ub):
+                    continue
             lines.extend(hunklines)
         if lines:
             yield tmpl('diffblock', parity=next(parity), blockno=blockno,