[Reproducible-builds] Bug#808121: Bug#808121: diffoscope: HTML output is bloated

Mike Hommey mh at glandium.org
Wed Dec 16 11:33:36 UTC 2015


On Wed, Dec 16, 2015 at 11:19:02AM +0100, Jérémy Bobbio wrote:
> Close: tag -1 + pending
> 
> Mike Hommey:
> > Looking at the HTML in the HTML output, one can see that it is needlessly large.
> > 
> > Specifically, there appears to be a lot of e.g. <span class="diffchanged2">
> > following each other, without even a separation between them. This conflates
> > the amount of memory necessary for browsers to render those pages.
> 
> I've commited a fix for this specific issue. The HTML presenter borrowed
> a lot of code from diff2html which was probably not much optimized in
> the first place. I guess the output could be vastly improved, but I'd
> rather focus on other part of the code for now. Patches highly welcome
> in the meantime.

Here's another easy win, attached.

Mike
-------------- next part --------------
diff --git a/diffoscope/presenters/html.py b/diffoscope/presenters/html.py
index d843f39..f425889 100644
--- a/diffoscope/presenters/html.py
+++ b/diffoscope/presenters/html.py
@@ -116,8 +116,9 @@ HEADER = """<!DOCTYPE html>
     tr.diffchanged td {
       background: #FFFFA0
     }
-    span.diffchanged2 {
-      background: #E0C880
+    ins, del {
+      background: #E0C880;
+      text-decoration: none
     }
     span.diffponct {
       color: #B08080
@@ -274,15 +275,15 @@ def linediff(s, t):
     return ''.join(l1).replace(DIFFOFF + DIFFON, ''), ''.join(l2).replace(DIFFOFF + DIFFON, '')
 
 
-def convert(s, ponct=0):
+def convert(s, ponct=0, tag=''):
     i = 0
     t = StringIO()
     for c in s:
         # used by diffs
         if c == DIFFON:
-            t.write('<span class="diffchanged2">')
+            t.write('<%s>' % tag)
         elif c == DIFFOFF:
-            t.write('</span>')
+            t.write('</%s>' % tag)
 
         # special highlighted chars
         elif c == "\t" and ponct == 1:
@@ -348,7 +349,7 @@ def output_line(print_func, s1, s2):
         if s1 is not None:
             print_func(u'<td class="diffline">%d </td>' % line1)
             print_func(u'<td class="diffpresent">')
-            print_func(convert(s1, ponct=1))
+            print_func(convert(s1, ponct=1, tag='del'))
             print_func(u'</td>')
         else:
             s1 = ""
@@ -357,7 +358,7 @@ def output_line(print_func, s1, s2):
         if s2 is not None:
             print_func(u'<td class="diffline">%d </td>' % line2)
             print_func(u'<td class="diffpresent">')
-            print_func(convert(s2, ponct=1))
+            print_func(convert(s2, ponct=1, tag='ins'))
             print_func(u'</td>')
         else:
             s2 = ""


More information about the Reproducible-builds mailing list