diff options
Diffstat (limited to 'utils/analyzer/SATestUpdateDiffs.py')
-rwxr-xr-x | utils/analyzer/SATestUpdateDiffs.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/utils/analyzer/SATestUpdateDiffs.py b/utils/analyzer/SATestUpdateDiffs.py new file mode 100755 index 000000000000..2282af15a523 --- /dev/null +++ b/utils/analyzer/SATestUpdateDiffs.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python + +""" +Update reference results for static analyzer. +""" + +import SATestBuild + +from subprocess import check_call +import os +import sys + +Verbose = 1 + + +def runCmd(Command): + if Verbose: + print "Executing %s" % Command + check_call(Command, shell=True) + + +def updateReferenceResults(ProjName, ProjBuildMode): + ProjDir = SATestBuild.getProjectDir(ProjName) + + RefResultsPath = os.path.join( + ProjDir, + SATestBuild.getSBOutputDirName(IsReferenceBuild=True)) + CreatedResultsPath = os.path.join( + ProjDir, + SATestBuild.getSBOutputDirName(IsReferenceBuild=False)) + + if not os.path.exists(CreatedResultsPath): + print >> sys.stderr, "New results not found, was SATestBuild.py "\ + "previously run?" + sys.exit(1) + + # Remove reference results: in git, and then again for a good measure + # with rm, as git might not remove things fully if there are empty + # directories involved. + runCmd('git rm -r -q "%s"' % (RefResultsPath,)) + runCmd('rm -rf "%s"' % (RefResultsPath,)) + + # Replace reference results with a freshly computed once. + runCmd('cp -r "%s" "%s"' % (CreatedResultsPath, RefResultsPath,)) + + # Run cleanup script. + BuildLogPath = SATestBuild.getBuildLogPath(RefResultsPath) + with open(BuildLogPath, "wb+") as PBuildLogFile: + SATestBuild.runCleanupScript(ProjDir, PBuildLogFile) + + SATestBuild.normalizeReferenceResults( + ProjDir, RefResultsPath, ProjBuildMode) + + # Clean up the generated difference results. + SATestBuild.cleanupReferenceResults(RefResultsPath) + + runCmd('git add "%s"' % (RefResultsPath,)) + + +def main(argv): + if len(argv) == 2 and argv[1] in ('-h', '--help'): + print >> sys.stderr, "Update static analyzer reference results based "\ + "\non the previous run of SATestBuild.py.\n"\ + "\nN.B.: Assumes that SATestBuild.py was just run" + sys.exit(1) + + with SATestBuild.projectFileHandler() as f: + for (ProjName, ProjBuildMode) in SATestBuild.iterateOverProjects(f): + updateReferenceResults(ProjName, int(ProjBuildMode)) + + +if __name__ == '__main__': + main(sys.argv) |