X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scripts%2Fbuild%2Foutput-distance.py;h=49a659b73febd69fff0f79f01b0536b016cf7c1c;hb=2545fab01a601743bb3ecc18942cf14263ccfc6c;hp=b90bda55488480543c4837d4296788b56fcac30b;hpb=b38fd63a19190741c0c19faf6a904af82c3f434c;p=lilypond.git
diff --git a/scripts/build/output-distance.py b/scripts/build/output-distance.py
old mode 100644
new mode 100755
index b90bda5548..49a659b73f
--- a/scripts/build/output-distance.py
+++ b/scripts/build/output-distance.py
@@ -5,6 +5,8 @@ import os
import math
import re
+import cgi
+
## so we can call directly as scripts/build/output-distance.py
me_path = os.path.abspath (os.path.split (sys.argv[0])[0])
sys.path.insert (0, me_path + '/../python/')
@@ -51,8 +53,7 @@ def system (c):
raise Exception ("failed")
return
-def shorten_string (s):
- threshold = 15
+def shorten_string (s, threshold = 15):
if len (s) > 2*threshold:
s = s[:threshold] + '..' + s[-threshold:]
return s
@@ -88,7 +89,7 @@ def compare_png_images (old, new, dest_dir):
system ('convert -depth 8 -crop %dx%d+0+0 %s %s/crop1.png' % (dims + (old, dir)))
system ('convert -depth 8 -crop %dx%d+0+0 %s %s/crop2.png' % (dims + (new, dir)))
- system ('compare -depth 8 -dissimilarity-threshold 1 %(dir)s/crop1.png %(dir)s/crop2.png %(dir)s/diff.png' % locals ())
+ system1 ('compare -depth 8 -dissimilarity-threshold 1 %(dir)s/crop1.png %(dir)s/crop2.png %(dir)s/diff.png' % locals ())
system ("convert -depth 8 %(dir)s/diff.png -blur 0x3 -negate -channel alpha,blue -type TrueColorMatte -fx 'intensity' %(dir)s/matte.png" % locals ())
@@ -375,12 +376,18 @@ class FileLink:
return ''
+ def directories (self):
+ return map (os.path.dirname, self.file_names)
+
def name (self):
base = os.path.basename (self.file_names[1])
base = os.path.splitext (base)[0]
base = hash_to_original_name.get (base, base)
base = os.path.splitext (base)[0]
- return base
+ return os.path.join (self.prefix (), base)
+
+ def prefix (self):
+ return os.path.dirname (os.path.commonprefix (self.file_names))
def extension (self):
return os.path.splitext (self.file_names[1])[1]
@@ -457,7 +464,7 @@ class GitFileCompareLink (FileCompareLink):
str = '\n'.join ([l[:80] for l in str.split ('\n')])
- str = '%s
' % str
+ str = '%s
' % cgi.escape (str)
return str
def calc_distance (self):
@@ -498,7 +505,7 @@ class TextFileCompareLink (FileCompareLink):
str = ''
if oldnew == 1:
str = '\n'.join ([d.replace ('\n','') for d in self.diff_lines])
- str = '%s
' % str
+ str = '%s
' % cgi.escape (str)
return str
class LogFileCompareLink (TextFileCompareLink):
@@ -521,7 +528,7 @@ class ProfileFileLink (FileCompareLink):
str += '%-8s: %8d (%5.3f)\n' % (k, int (self.results[oldnew][k]),
self.get_ratio (k))
- return '
%s' % str + return '
%s' % cgi.escape (str) def get_ratio (self, key): (v1,v2) = (self.results[0].get (key, -1), @@ -820,13 +827,25 @@ class ComparisonData: re.sub (r'\\sourcefilename "([^"]+)"', note_original, open (sf).read ()) else: - print 'no source for', val + print 'no source for', val.file_names[1] def compare_trees (self, dir1, dir2): self.compare_directories (dir1, dir2) - (root, dirs, files) = os.walk (dir1).next () + try: + (root, dirs, files) = os.walk (dir1).next () + except StopIteration: + if dir1.endswith("-baseline"): + sys.stderr.write("Failed to walk through %s. This can be caused by forgetting to run make test-baseline.\n" % dir1) + else: + sys.stderr.write("Failed to walk through %s; please check it exists.\n" % dir1) + sys.exit(1) + for d in dirs: + # don't walk the share folders + if d.startswith("share"): + continue + d1 = os.path.join (dir1, d) d2 = os.path.join (dir2, d) @@ -872,14 +891,18 @@ class ComparisonData: self.compare_general_files (klasses[ext], f1, f2) def compare_general_files (self, klass, f1, f2): + prefix = os.path.commonprefix ([f1, f2]) name = os.path.split (f1)[1] + name = os.path.join (prefix, name) file_link = klass (f1, f2) self.file_links[name] = file_link def compare_signature_files (self, f1, f2): + prefix = os.path.commonprefix ([f1, f2]) name = os.path.split (f1)[1] name = re.sub ('-[0-9]+.signature', '', name) + name = os.path.join (prefix, name) file_link = None try: @@ -932,42 +955,84 @@ class ComparisonData: out.write ('%d below threshold\n' % len (below)) out.write ('%d unchanged\n' % len (unchanged)) - def create_text_result_page (self, dir1, dir2, dest_dir, threshold): + def create_text_result_page (self, dest_dir, threshold): self.write_text_result_page (dest_dir + '/index.txt', threshold) - def create_html_result_page (self, dir1, dir2, dest_dir, threshold): - dir1 = dir1.replace ('//', '/') - dir2 = dir2.replace ('//', '/') - + def create_html_result_page (self, dest_dir, threshold): (changed, below, unchanged) = self.thresholded_results (threshold) - - html = '' - old_prefix = os.path.split (dir1)[1] - for link in changed: - html += link.html_record_string (dest_dir) - - - short_dir1 = shorten_string (dir1) - short_dir2 = shorten_string (dir2) - html = ''' -
distance | %(short_dir1)s | %(short_dir2)s |
---|
') + table_rows = '' + old_prefix = None + for link in changed: + this_prefix = link.prefix () + if (old_prefix != this_prefix): + old_prefix = this_prefix + short_dir1 = shorten_string (link.directories ()[0], 30) + short_dir2 = shorten_string (link.directories ()[1], 30) + table_rows += header_row % locals() + table_rows += link.html_record_string (dest_dir) + + summary = '' below_count = len (below) if below_count: - html += ('
%d below threshold
' % below_count) + summary += '%d below threshold
' % below_count - html += ('%d unchanged
' % len (unchanged)) + summary += '%d unchanged
' % len (unchanged) + + me = sys.argv[0] + + html = ''' + ++ click to filter rows by type: + ly / + profiling / + signature / + midi / + log / + gittxt / + reset to all +
+ +