From 8751dc7c817aa2d9eb42075b1d12f1f0c7a82767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Thu, 1 Jan 2015 09:59:47 +0100 Subject: [PATCH] triage: added folder for triage data --- triage/readme.txt | 14 ++++++++++ triage/theme1.css | 30 +++++++++++++++++++++ triage/triage.py | 69 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 triage/readme.txt create mode 100644 triage/theme1.css create mode 100644 triage/triage.py diff --git a/triage/readme.txt b/triage/readme.txt new file mode 100644 index 000000000..533bb3414 --- /dev/null +++ b/triage/readme.txt @@ -0,0 +1,14 @@ + +This folder is for triage data of cppcheck results. + +You can scan these projects with arbitrary cppcheck version and get triaged reports. + +Usage: + +1. Pick a project.. for example linux-3.11. +2. Scan linux-3.11 on your computer with cppcheck (arbitrary version). +3. run the triage.py script: + python triage.py linux-3.11 path-to-cppcheck-results.txt +4. A report.html is generated + + diff --git a/triage/theme1.css b/triage/theme1.css new file mode 100644 index 000000000..75df77464 --- /dev/null +++ b/triage/theme1.css @@ -0,0 +1,30 @@ + +th { + font-size:80%; + color:#ffffff; + background-color:#555555; + border:1px solid #555555; + padding:3px; + vertical-align:top; + text-align:left; +} + +td { + font-size:80%; + border:1px solid #d4d4d4; + padding:5px; + padding-top:7px; + padding-bottom:7px; + vertical-align:top; +} + +.code { + font-family:courier; + background-color:lightgray; + border:1px solid gray; +} + +.untriaged { color:black; } +.tp { color:black; } +.fp { color:lightgray; } + diff --git a/triage/triage.py b/triage/triage.py new file mode 100644 index 000000000..658cc69f0 --- /dev/null +++ b/triage/triage.py @@ -0,0 +1,69 @@ + +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.readlines() +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'] = '' + +for result in results: + 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 + +fout.write(out['tp']) +fout.write(out['fp']) +fout.write(out['untriaged']) + +fout.write('
FilenameLineMessageClassification
'+filename+''+linenr+''+message+''+classification+'
') +fout.close()