Files
clang-p2996/clang/utils/analyzer/SATestUpdateDiffs.py
George Karpenkov 3c128cb1e6 [analyzer] [tests] Remove empty folders in reference results, do not store diffs.txt
Storing diffs.txt is now redundant, as we simply dump the CmpRuns output
to stdout (it is saved in CI and tends to be small).
Not generating those files enables us to remove empty folders, which
confuse git, as it would not add them with reference results.

llvm-svn: 316948
2017-10-30 19:40:33 +00:00

74 lines
2.2 KiB
Python
Executable File

#!/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)