1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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
|