import glob import sys import re if len(sys.argv) != 3: print('usage: triage.py project resultsfile.txt') sys.exit(1) project = sys.argv[1] resultfile = sys.argv[2] f = open(project + '/true-positives.txt', 'rt') truepositives = f.read() f.close(); f = open(project + '/false-positives.txt', 'rt') falsepositives = f.read() f.close(); fin = open(resultfile,'rt') results = fin.read() fin.close() fout = open('report.html','wt') fout.write('Cppcheck results for ' + project + '\n') fout.write('

Cppcheck results for ' + project + '

\n') fout.write('\n') fout.write('\n') out = {} out['untriaged'] = '' out['fp'] = '' out['tp'] = '' out['notfound'] = '' for result in results.split('\n'): result = result.strip() res = re.match('\\[('+project+'.+):([0-9]+)\\]:\s+[(][a-z]+[)] (.+)', result) if res == None: continue filename = res.group(1) linenr = res.group(2) message = res.group(3) css = 'untriaged' classification = 'Untriaged' if result in truepositives: css = 'tp' classification = 'Bug' elif result in falsepositives: css = 'fp' classification = 'Not bug' html = ' ' html += '' html += '' html += '' html += '' html += '\n' out[css] += html f = open(project + '/true-positives.txt', 'rt') for line in f.readlines(): line = line.strip() if line.find('] -> [') > 0 or line.find('(error)') < 0: continue res = re.match('\\[('+project+'.+):([0-9]+)\\]:\s+[(][a-z]+[)] (.+)', line) if res == None: continue if line in results: continue filename = res.group(1) linenr = res.group(2) message = res.group(3) classification = 'Not Found' css = 'notfound' html = ' ' html += '' html += '' html += '' html += '' html += '\n' out[css] += html f.close(); fout.write(out['tp']) fout.write(out['notfound']) fout.write(out['untriaged']) fout.write(out['fp']) fout.write('
FilenameLineMessageClassification
'+filename+''+linenr+''+message+''+classification+'
'+filename+''+linenr+''+message+''+classification+'
') fout.close()