A python script to combin gcov output with git blame

This commit is contained in:
Nick Mathewson 2013-07-16 15:31:07 -04:00
parent f797ac465f
commit dd44ff663e

48
contrib/cov-blame Executable file
View File

@ -0,0 +1,48 @@
#!/usr/bin/python
import os
import re
import subprocess
import sys
def handle_file(source_fname, cov_fname):
lines_blm = subprocess.Popen(["git", "blame", source_fname], stdout=subprocess.PIPE).stdout.readlines()
lines_cov = open(cov_fname).readlines()
# XXXX expensive!
while re.match(r'\s*-:\s*0:', lines_cov[0]):
del lines_cov[0]
if len(lines_blm) != len(lines_cov):
print >>sys.stderr, "MISMATCH IN NUMBER OF LINES in",source_fname
for b,c in zip(lines_blm, lines_cov):
m = re.match(r'\s*([^\s:]+):', c)
if not m:
print >>sys.stderr, "CONFUSING LINE %r"% c
cov = 'X'
elif m.group(1) == '-':
cov = '-'
elif m.group(1)[0] == '#':
cov = '#'
elif m.group(1)[0].isdigit():
cov = '1'
else:
print >>sys.stderr, "CONFUSING LINE %r"% c
cov = 'X'
print cov, b,
COV_DIR = sys.argv[1]
SOURCES = sys.argv[2:]
for fn in SOURCES:
_, base = os.path.split(fn)
cfn = os.path.join(COV_DIR, base)
cfn += ".gcov"
if os.path.exists(cfn):
handle_file(fn, cfn)
else:
print >>sys.stderr, "NO FILE EXISTS CALLED ",cfn