Revision 84f01eb74ec336f97645ddeb2315a08b737cfd6b authored by Dan Gohman on 04 March 2014, 08:09:11 UTC, committed by Dan Gohman on 04 March 2014, 08:09:11 UTC
1 parent a7f7be8
autodediffer.py
'''
A semi-smart diff for autodebugger logs.
Run it with filenames of two autodebugger logs as parameters
'''
import os, sys
def process_line(line):
#AD:2041,0.900000
if not line.startswith('AD:'): return
line = line.split(':')[1]
num, val = line.split(',')
return [int(num), float(val)]
a = open(sys.argv[1], 'r').readlines()
b = open(sys.argv[2], 'r').readlines()
MIN = 0.0001 if len(sys.argv) < 4 else sys.argv[3]
ai = 0
bi = 0
maxx = max(len(a), len(b))
while max(ai, bi) < maxx:
while 1:
av = process_line(a[ai])
if av: break
ai += 1
while 1:
bv = process_line(b[bi])
if bv: break
bi += 1
#print 'curr:', ai, bi, av, bv
# Find the nearest matching num, if not already matched
if not av[0] == bv[0]:
tai = ai+1
tbi = bi+1
while 1:
tav = process_line(a[tai])
tbv = process_line(b[tbi])
#print 'seek:', tai, tbi, tav, tbv
if tav and tav[0] == bv[0]:
ai = tai
av = tav
break
elif tbv and tbv[0] == av[0]:
bi = tbi
bv = tbv
break
tai += 1
tbi += 1
assert av[0] == bv[0]
diff = abs(av[1] - bv[1])
if diff > MIN:
print '<<%d %d>> %d : %.5f' % (ai, bi, av[0], diff)
ai += 1
bi += 1
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...