import sys
import optparse
+
+## so we can call directly as buildscripts/output-distance.py
+sys.path.insert (0, '../python')
+
import safeeval
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)
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]))
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, [])
s2 = read_signature_file (f2)
return SystemLink (s1, s2).distance ()
-
-
def paired_files (dir1, dir2, pattern):
"""
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)
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 ()
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 ('//', '/')
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)
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
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')
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
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' : '',
'extragrob': 'c4',
'userstring': 'test' }]
-
for d in dicts:
open (d['name'] + '.ly','w').write (ly_template % d)
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 ()
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)