summaryrefslogtreecommitdiffstats
path: root/utils/analyzer/CmpRuns.py
diff options
context:
space:
mode:
Diffstat (limited to 'utils/analyzer/CmpRuns.py')
-rwxr-xr-xutils/analyzer/CmpRuns.py72
1 files changed, 43 insertions, 29 deletions
diff --git a/utils/analyzer/CmpRuns.py b/utils/analyzer/CmpRuns.py
index 3ca9b2b..30157be 100755
--- a/utils/analyzer/CmpRuns.py
+++ b/utils/analyzer/CmpRuns.py
@@ -120,9 +120,8 @@ class CmpOptions:
self.verboseLog = verboseLog
class AnalysisReport:
- def __init__(self, run, files, clang_vers):
+ def __init__(self, run, files):
self.run = run
- self.clang_version = clang_vers
self.files = files
self.diagnostics = []
@@ -134,32 +133,28 @@ class AnalysisRun:
self.reports = []
# Cumulative list of all diagnostics from all the reports.
self.diagnostics = []
-
-
-# Backward compatibility API.
-def loadResults(path, opts, root = "", deleteEmpty=True):
- return loadResultsFromSingleRun(SingleRunInfo(path, root, opts.verboseLog),
- deleteEmpty)
-
-# Load results of the analyzes from a given output folder.
-# - info is the SingleRunInfo object
-# - deleteEmpty specifies if the empty plist files should be deleted
-def loadResultsFromSingleRun(info, deleteEmpty=True):
- path = info.path
- run = AnalysisRun(info)
+ self.clang_version = None
- for f in os.listdir(path):
- if (not f.endswith('plist')):
- continue
+ def getClangVersion(self):
+ return self.clang_version
- p = os.path.join(path, f)
+ def readSingleFile(self, p, deleteEmpty):
data = plistlib.readPlist(p)
+ # We want to retrieve the clang version even if there are no
+ # reports. Assume that all reports were created using the same
+ # clang version (this is always true and is more efficient).
+ if 'clang_version' in data:
+ if self.clang_version == None:
+ self.clang_version = data.pop('clang_version')
+ else:
+ data.pop('clang_version')
+
# Ignore/delete empty reports.
if not data['files']:
if deleteEmpty == True:
os.remove(p)
- continue
+ return
# Extract the HTML reports, if they exists.
if 'HTMLDiagnostics_files' in data['diagnostics'][0]:
@@ -171,21 +166,40 @@ def loadResultsFromSingleRun(info, deleteEmpty=True):
htmlFiles.append(d.pop('HTMLDiagnostics_files')[0])
else:
htmlFiles = [None] * len(data['diagnostics'])
-
- clang_version = ''
- if 'clang_version' in data:
- clang_version = data.pop('clang_version')
-
- report = AnalysisReport(run, data.pop('files'), clang_version)
+
+ report = AnalysisReport(self, data.pop('files'))
diagnostics = [AnalysisDiagnostic(d, report, h)
for d,h in zip(data.pop('diagnostics'),
htmlFiles)]
assert not data
-
+
report.diagnostics.extend(diagnostics)
- run.reports.append(report)
- run.diagnostics.extend(diagnostics)
+ self.reports.append(report)
+ self.diagnostics.extend(diagnostics)
+
+
+# Backward compatibility API.
+def loadResults(path, opts, root = "", deleteEmpty=True):
+ return loadResultsFromSingleRun(SingleRunInfo(path, root, opts.verboseLog),
+ deleteEmpty)
+
+# Load results of the analyzes from a given output folder.
+# - info is the SingleRunInfo object
+# - deleteEmpty specifies if the empty plist files should be deleted
+def loadResultsFromSingleRun(info, deleteEmpty=True):
+ path = info.path
+ run = AnalysisRun(info)
+
+ if os.path.isfile(path):
+ run.readSingleFile(path, deleteEmpty)
+ else:
+ for (dirpath, dirnames, filenames) in os.walk(path):
+ for f in filenames:
+ if (not f.endswith('plist')):
+ continue
+ p = os.path.join(dirpath, f)
+ run.readSingleFile(p, deleteEmpty)
return run
OpenPOWER on IntegriCloud