X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=buildscripts%2Foutput-distance.py;h=8586d2481ab9cb9beb45bcd06c4b64685eee63b7;hb=a1a743e61326bcee9ae22c557610d52769bc32c5;hp=374f7695dbf3e07e9182d8b516c00ea07d2595e8;hpb=e42585017a01fd02f6353b994cf0c87b03a7bb2e;p=lilypond.git
diff --git a/buildscripts/output-distance.py b/buildscripts/output-distance.py
index 374f7695db..8586d2481a 100644
--- a/buildscripts/output-distance.py
+++ b/buildscripts/output-distance.py
@@ -28,7 +28,7 @@ class TempDirectory:
print 'dir is', self.dir
def __del__ (self):
print 'rm -rf %s' % self.dir
- os.system ('rm -rf %s' % self.dir )
+ os.system ('rm -rf %s' % self.dir)
def __call__ (self):
return self.dir
@@ -91,7 +91,7 @@ def compare_png_images (old, new, dest_dir):
system ("convert -depth 8 %(dir)s/diff.png -blur 0x3 -negate -channel alpha,blue -type TrueColorMatte -fx 'intensity' %(dir)s/matte.png" % locals ())
- system ("composite -quality 65 %(dir)s/matte.png %(new)s %(dest)s" % locals ())
+ system ("composite -compose atop -quality 65 %(dir)s/matte.png %(new)s %(dest)s" % locals ())
################################################################
@@ -347,7 +347,10 @@ class FileLink:
def text_record_string (self):
return '%-30f %-20s\n' % (self.distance (),
- self.name ())
+ self.name ()
+ + os.path.splitext (self.file_names[1])[1]
+ )
+
def calc_distance (self):
return 0.0
@@ -357,11 +360,18 @@ class FileLink:
return self._distance
+ def source_file (self):
+ for ext in ('.ly', '.ly.txt'):
+ base = os.path.splitext (self.file_names[1])[0]
+ f = base + ext
+ if os.path.exists (f):
+ return f
+
+ return ''
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
@@ -383,8 +393,6 @@ class FileLink:
return self.file_names[oldnew]
def html_record_string (self, dest_dir):
- self.link_files_for_html (dest_dir)
-
dist = self.distance()
details = self.get_distance_details ()
@@ -392,7 +400,7 @@ class FileLink:
details_base = os.path.splitext (self.file_names[1])[0]
details_base += '.details.html'
fn = dest_dir + '/' + details_base
- open (fn, 'w').write (details)
+ open_write_file (fn).write (details)
details = '
(details)' % locals ()
@@ -453,6 +461,7 @@ class GitFileCompareLink (FileCompareLink):
d = 1.0001 *options.threshold
return d
+
class TextFileCompareLink (FileCompareLink):
def calc_distance (self):
@@ -475,6 +484,11 @@ class TextFileCompareLink (FileCompareLink):
str = '%s
' % str
return str
+class LogFileCompareLink (TextFileCompareLink):
+ def get_content (self, f):
+ c = TextFileCompareLink.get_content (self, f)
+ c = re.sub ("\nProcessing `[^\n]+'\n", '', c)
+ return c
class ProfileFileLink (FileCompareLink):
def __init__ (self, f1, f2):
@@ -488,7 +502,7 @@ class ProfileFileLink (FileCompareLink):
str += '%-8s: %d\n' % (k, int (self.results[oldnew][k]))
else:
str += '%-8s: %8d (%5.3f)\n' % (k, int (self.results[oldnew][k]),
- self.get_ratio (k))
+ self.get_ratio (k))
return '
%s' % str @@ -510,12 +524,14 @@ class ProfileFileLink (FileCompareLink): note_info, self.contents[oldnew]) dist = 0.0 - factor = {'time': 1.0 , - 'cells': 10.0, - } + factor = { + 'time': 0.1, + 'cells': 5.0, + } for k in ('time', 'cells'): - dist += math.tan (self.get_ratio (k) /(0.5* math.pi)) * factor[k] - 1 + real_val = math.tan (self.get_ratio (k) * 0.5 * math.pi) + dist += math.exp (math.fabs (real_val) * factor[k]) - 1 dist = min (dist, 100) return dist @@ -563,12 +579,6 @@ class SignatureFileLink (FileLink): return d + orphan_distance - def source_file (self): - for ext in ('.ly', '.ly.txt'): - if os.path.exists (self.base_names[1] + ext): - return self.base_names[1] + ext - return '' - def add_file_compare (self, f1, f2): system_index = [] @@ -582,18 +592,6 @@ class SignatureFileLink (FileLink): self.base_names = (os.path.normpath (base1), os.path.normpath (base2)) - def note_original (match): - hash_to_original_name[os.path.basename (self.base_names[1])] = match.group (1) - return '' - - ## ugh: drop the .ly.txt - for ext in ('.ly', '.ly.txt'): - try: - re.sub (r'\\sourcefilename "([^"]+)"', - note_original, open (base1 + ext).read ()) - except IOError: - pass - s1 = read_signature_file (f1) s2 = read_signature_file (f2) @@ -611,12 +609,17 @@ class SignatureFileLink (FileLink): for f in glob.glob (pat): infile = f outfile = (dest_dir + '/' + f).replace ('.eps', '.png') - + data_option = '' + if options.local_data_dir: + data_option = ('-slilypond-datadir=%s/../share/lilypond/current ' + % os.path.dirname(infile)) + mkdir (os.path.split (outfile)[0]) cmd = ('gs -sDEVICE=png16m -dGraphicsAlphaBits=4 -dTextAlphaBits=4 ' + ' %(data_option)s ' ' -r101 ' ' -sOutputFile=%(outfile)s -dNOSAFER -dEPSCrop -q -dNOPAUSE ' - ' %(infile)s -c quit ' % locals ()) + ' %(infile)s -c quit ') % locals () files_created[oldnew].append (outfile) system (cmd) @@ -770,7 +773,7 @@ def paired_files (dir1, dir2, pattern): pairs = [] missing = [] - for f in files[0].keys (): + for f in files[0]: try: files[1].pop (f) pairs.append (f) @@ -786,6 +789,23 @@ class ComparisonData: self.added = [] self.file_links = {} + def read_sources (self): + + ## ugh: drop the .ly.txt + for (key, val) in self.file_links.items (): + + def note_original (match, ln=val): + key = ln.name () + hash_to_original_name[key] = match.group (1) + return '' + + sf = val.source_file () + if sf: + re.sub (r'\\sourcefilename "([^"]+)"', + note_original, open (sf).read ()) + else: + print 'no source for', val + def compare_trees (self, dir1, dir2): self.compare_directories (dir1, dir2) @@ -801,7 +821,11 @@ class ComparisonData: self.compare_trees (d1, d2) def compare_directories (self, dir1, dir2): - for ext in ['signature', 'midi', 'log', 'profile', 'gittxt']: + for ext in ['signature', + 'midi', + 'log', + 'profile', + 'gittxt']: (paired, m1, m2) = paired_files (dir1, dir2, '*.' + ext) self.missing += [(dir1, m) for m in m1] @@ -823,7 +847,7 @@ class ComparisonData: ext = os.path.splitext (f1)[1] klasses = { '.midi': MidiFileLink, - '.log' : TextFileCompareLink, + '.log' : LogFileCompareLink, '.profile': ProfileFileLink, '.gittxt': GitFileCompareLink, } @@ -931,13 +955,21 @@ class ComparisonData: dest_file = dest_dir + '/index.html' open_write_file (dest_file).write (html) + + + for link in changed: + link.link_files_for_html (dest_dir) + def print_results (self, threshold): self.write_text_result_page ('', threshold) def compare_trees (dir1, dir2, dest_dir, threshold): data = ComparisonData () data.compare_trees (dir1, dir2) + data.read_sources () + + data.print_results (threshold) if os.path.isdir (dest_dir): @@ -1080,7 +1112,7 @@ def test_basic_compare (): names = [d['name'] for d in dicts] - system ('lilypond -ddump-profile -dseparate-log-files -ddump-signatures --png -b eps ' + ' '.join (names)) + system ('lilypond -ddump-profile -dseparate-log-files -ddump-signatures --png -dbackend=eps ' + ' '.join (names)) multipage_str = r''' @@ -1099,7 +1131,6 @@ def test_basic_compare (): test_compare_signatures (names) def test_compare_signatures (names, timing=False): - import time times = 1 @@ -1194,6 +1225,13 @@ def main (): action="store_true", help="Create PNGs from EPSes") + + p.add_option ('--local-datadir', + dest="local_data_dir", + default=False, + action="store_true", + help='whether to use the share/lilypond/ directory in the test directory') + p.add_option ('-o', '--output-dir', dest="output_dir", default=None, @@ -1202,22 +1240,22 @@ def main (): help='where to put the test results [tree2/compare-tree1tree2]') global options - (options, a) = p.parse_args () + (options, args) = p.parse_args () if options.run_test: run_tests () sys.exit (0) - if len (a) != 2: + if len (args) != 2: p.print_usage() sys.exit (2) name = options.output_dir if not name: - name = a[0].replace ('/', '') - name = os.path.join (a[1], 'compare-' + shorten_string (name)) + name = args[0].replace ('/', '') + name = os.path.join (args[1], 'compare-' + shorten_string (name)) - compare_trees (a[0], a[1], name, options.threshold) + compare_trees (args[0], args[1], name, options.threshold) if __name__ == '__main__': main()