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()
out = {}
out['untriaged'] = ''
out['fp'] = ''
out['tp'] = ''
out['notfound'] = ''
numberOfFalsePositives = 0
numberOfTruePositives = 0
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'
numberOfTruePositives += 1
elif result in falsepositives:
css = 'fp'
classification = 'Not bug'
numberOfFalsePositives += 1
href = None
html = '
'
html += ''+filename+' '
html += ''+linenr+' '
html += ''+message+' '
if project=='linux-3.11':
href = 'http://github.com/torvalds/linux/blob/v3.11' + filename[filename.find('/'):] + '#L' + linenr
if href:
html += '' + classification + ' '
else:
html += '' + classification + ' '
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 += ''+filename+' '
html += ''+linenr+' '
html += ''+message+' '
html += ''+classification+' '
html += ' \n'
out[css] += html
f.close();
project2 = ''
if project.find('-') > 0:
project2 = project[:project.find('-')]
else:
project2 = project
fout = open('report.html','wt')
fout.write('Cppcheck results for ' + project + ' \n')
fout.write('Cppcheck results for ' + project + ' \n')
fout.write('Number of true positives: ' + str(numberOfTruePositives) + '
\n')
fout.write('Number of false positives: ' + str(numberOfFalsePositives) + '
\n')
fout.write('\n')
fout.write('Filename Line Message Classification \n')
fout.write(out['tp'])
fout.write(out['notfound'])
fout.write(out['untriaged'])
fout.write(out['fp'])
fout.write('
')
fout.close()