|  | @@ -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
 | 
	
		
			
				|  |  | +
 |