mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-23 20:03:31 +01:00
A python script to combin gcov output with git blame
This commit is contained in:
parent
f797ac465f
commit
dd44ff663e
48
contrib/cov-blame
Executable file
48
contrib/cov-blame
Executable 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
|
||||
|
Loading…
Reference in New Issue
Block a user