123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- #!/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
|