]> git.donarmstrong.com Git - lilypond.git/blobdiff - buildscripts/output-distance.py
(write-system-signature): escape newlines too.
[lilypond.git] / buildscripts / output-distance.py
index ddd3263fce2ae87fe2a78301d0372ae7f8e4289d..927d553bc43a30f8608962cde3ec0951205268ba 100644 (file)
@@ -2,6 +2,10 @@
 import sys
 import optparse
 
+
+## so we can call directly as buildscripts/output-distance.py
+sys.path.insert (0, '../python')
+
 import safeeval
 
 
@@ -24,6 +28,9 @@ def max_distance (x1, x2):
 empty_interval = (INFTY, -INFTY)
 empty_bbox = (empty_interval, empty_interval)
 
+def interval_is_empty (i):
+    return i[0] > i[1]
+
 def interval_length (i):
     return max (i[1]-i[0], 0) 
     
@@ -35,6 +42,10 @@ def interval_intersect (i1, i2):
     return (max (i1[0], i2[0]),
             min (i1[1], i2[1]))
 
+def bbox_is_empty (b):
+    return (interval_is_empty (b[0])
+            or interval_is_empty (b[1]))
+
 def bbox_union (b1, b2):
     return (interval_union (b1[X_AXIS], b2[X_AXIS]),
             interval_union (b2[Y_AXIS], b2[Y_AXIS]))
@@ -139,6 +150,11 @@ class SystemLink:
         self.back_link_dict = {}
 
         for g in system1.grobs ():
+
+            ## skip empty bboxes.
+            if bbox_is_empty (g.bbox):
+                continue
+            
             closest = system2.closest (g.name, g.centroid)
             
             self.link_list_dict.setdefault (closest, [])
@@ -185,8 +201,6 @@ def compare_signature_files (f1, f2):
     s2 = read_signature_file (f2)
     
     return SystemLink (s1, s2).distance ()
-    
-    
 
 def paired_files (dir1, dir2, pattern):
     """
@@ -219,10 +233,13 @@ class ComparisonData:
     def compare_trees (self, dir1, dir2):
         self.compare_directories (dir1, dir2)
         
-        (root, files, dirs) = os.walk (dir1).next ()
+        (root, dirs, files) = os.walk (dir1).next ()
         for d in dirs:
             d1 = os.path.join (dir1, d)
             d2 = os.path.join (dir2, d)
+
+            if os.path.islink (d1) or os.path.islink (d2):
+                continue
             
             if os.path.isdir (d2):
                 self.compare_trees (d1, d2)
@@ -239,14 +256,17 @@ class ComparisonData:
             f1 = dir1 +  '/' + p
             distance = compare_signature_files (f1, f2)
             self.result_dict[f2] = (distance, f1)
-    
-    def create_text_result_page (self, filename):
 
+    def create_text_result_page (self, dir1, dir2):
+        self.write_text_result_page (dir2 + '/' + os.path.split (dir1)[1] + '.txt')
+        
+    def write_text_result_page (self, filename):
+        print 'writing "%s"' % filename
         out = None
         if filename == '':
             out = sys.stdout
         else:
-            out = file (filename, 'w')
+            out = open (filename, 'w')
         
         results = [(score, oldfile, file) for (file, (score, oldfile)) in self.result_dict.items ()]  
         results.sort ()
@@ -261,7 +281,7 @@ class ComparisonData:
             out.write ('%20s%-10s %s\n' % ('','added', os.path.join (dir, file)))
 
     def print_results (self):
-        self.create_text_result_page ('')
+        self.write_text_result_page ('')
         
     def create_html_result_page (self, dir1, dir2):
         dir1 = dir1.replace ('//', '/')
@@ -274,19 +294,29 @@ class ComparisonData:
 
         results.sort ()
         results.reverse ()
-
+        
         html = ''
         old_prefix = os.path.split (dir1)[1]
-        os.mkdir (dir2 + '/' + old_prefix)
-        for (score, oldfile, newfile) in  results:
-            old_base = re.sub ("-[0-9]+.signature", '', os.path.split (oldfile)[1])
+
+        dest_dir = os.path.join (dir2, old_prefix)
+        shutil.rmtree  (dest_dir, ignore_errors=True)
+        os.mkdir (dest_dir)
+        for (score, oldfile, newfile) in results:
+            
+            old_base = re.sub ("-[0-9]+.signature", '', oldfile)
+            old_name = os.path.split (old_base)[1]
             new_base = re.sub ("-[0-9]+.signature", '', newfile)
             
             for ext in 'png', 'ly':
-                shutil.copy2 (old_base + '.' + ext, dir2 + '/' + old_prefix)
+                src_file = old_base + '.' + ext
+                
+                if os.path.exists (src_file):
+                    shutil.copy2 (src_file, dest_dir)
+                else:
+                    print "warning: can't find", src_file
 
-            img_1 = os.path.join (old_prefix, old_base + '.png')
-            ly_1 = os.path.join (old_prefix, old_base + '.ly')
+            img_1 = os.path.join (old_prefix, old_name + '.png')
+            ly_1 = os.path.join (old_prefix, old_name + '.ly')
 
             img_2 = new_base.replace (dir2, '') + '.png'
             img_2 = re.sub ("^/*", '', img_2)
@@ -334,10 +364,11 @@ class ComparisonData:
         
 
 def compare_trees (dir1, dir2):
-    data =  ComparisonData ()
+    data = ComparisonData ()
     data.compare_trees (dir1, dir2)
     data.print_results ()
     data.create_html_result_page (dir1, dir2)
+#    data.create_text_result_page (dir1, dir2)
     
 ################################################################
 # TESTING
@@ -349,6 +380,7 @@ def system (x):
     stat = os.system (x)
     assert stat == 0
 
+
 def test_paired_files ():
     print paired_files (os.environ["HOME"] + "/src/lilypond/scripts/",
                         os.environ["HOME"] + "/src/lilypond-stable/buildscripts/", '*.py')
@@ -368,7 +400,8 @@ def test_compare_trees ():
     system ('cp 19-0.signature dir2/20-0.signature')
 
     compare_trees ('dir1', 'dir2')
-    
+
+
 def test_basic_compare ():
     ly_template = r"""#(set! toplevel-score-handler print-score-with-defaults)
 #(set! toplevel-music-handler
@@ -378,10 +411,14 @@ def test_basic_compare ():
     p (scorify-music m p)))))
 
 %(papermod)s
-
-\relative c {
+<<
+\new Staff \relative c {
   c^"%(userstring)s" %(extragrob)s
   }
+\new Staff \relative c {
+  c^"%(userstring)s" %(extragrob)s
+  }
+>>
 """
 
     dicts = [{ 'papermod' : '',
@@ -401,7 +438,6 @@ def test_basic_compare ():
                'extragrob': 'c4',
                'userstring': 'test' }]
 
-
     for d in dicts:
         open (d['name'] + '.ly','w').write (ly_template % d)
         
@@ -410,12 +446,10 @@ def test_basic_compare ():
     system ('lilypond -ddump-signatures --png -b eps ' + ' '.join (names))
     
     sigs = dict ((n, read_signature_file ('%s-0.signature' % n)) for n in names)
-
     combinations = {}
     for (n1, s1) in sigs.items():
         for (n2, s2) in sigs.items():
             combinations['%s-%s' % (n1, n2)] = SystemLink (s1,s2).distance ()
-            
 
     results = combinations.items ()
     results.sort ()
@@ -426,6 +460,7 @@ def test_basic_compare ():
     assert combinations['20-20expr'] > 50.0
     assert combinations['20-19'] < 10.0
 
+
 def test_sigs (a,b):
     sa = read_signature_file (a)
     sb = read_signature_file (b)