You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
2.5 KiB
113 lines
2.5 KiB
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
usage: coverage_diff.py info_file diff_file > > coverage-diff.info
|
|
"""
|
|
|
|
import sys
|
|
|
|
|
|
def get_diff_file_lines(diff_file):
|
|
"""
|
|
Args:
|
|
diff_file (str): File to get modified lines.
|
|
|
|
Returns:
|
|
dict: The diff lines of files.
|
|
"""
|
|
diff_file_lines = {}
|
|
|
|
current_file = None
|
|
current_line = -1
|
|
|
|
with open(diff_file) as diff_file:
|
|
for line in diff_file:
|
|
line = line.strip()
|
|
|
|
if line.startswith('+++ '):
|
|
current_file = line.lstrip('+++ ')
|
|
|
|
diff_file_lines[current_file] = []
|
|
|
|
continue
|
|
|
|
elif line.startswith('@@ '):
|
|
current_line = line.split()[2]
|
|
current_line = current_line.lstrip('+').split(',')[0]
|
|
current_line = int(current_line)
|
|
|
|
continue
|
|
|
|
elif line.startswith('-'):
|
|
continue
|
|
|
|
elif line.startswith('+'):
|
|
diff_file_lines[current_file].append(current_line)
|
|
|
|
current_line += 1
|
|
|
|
return diff_file_lines
|
|
|
|
|
|
def get_info_file_lines(info_file, diff_file):
|
|
"""
|
|
Args:
|
|
info_file (str): File generated by lcov.
|
|
diff_file (str): File to get modified lines.
|
|
|
|
Returns:
|
|
None
|
|
"""
|
|
diff_file_lines = get_diff_file_lines(diff_file)
|
|
|
|
current_lines = []
|
|
current_lf = 0
|
|
current_lh = 0
|
|
|
|
with open(info_file) as info_file:
|
|
for line in info_file:
|
|
line = line.strip()
|
|
|
|
if line.startswith('SF:'):
|
|
current_file = line.lstrip('SF:')
|
|
|
|
if current_file.startswith('/paddle/'):
|
|
current_file = current_file[len('/paddle/'):]
|
|
|
|
current_lines = diff_file_lines.get(current_file, [])
|
|
|
|
elif line.startswith('DA:'):
|
|
da = line.lstrip('DA:').split(',')
|
|
|
|
if int(da[0]) in current_lines:
|
|
current_lf += 1
|
|
|
|
if not line.endswith(',0'):
|
|
current_lh += 1
|
|
|
|
print(line)
|
|
|
|
continue
|
|
|
|
elif line.startswith('LF:'):
|
|
print('LF:{}'.format(current_lf))
|
|
|
|
continue
|
|
|
|
elif line.startswith('LH:'):
|
|
print('LH:{}'.format(current_lh))
|
|
|
|
continue
|
|
|
|
print(line)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if len(sys.argv) < 3:
|
|
exit()
|
|
|
|
info_file = sys.argv[1]
|
|
diff_file = sys.argv[2]
|
|
|
|
get_info_file_lines(info_file, diff_file)
|