4 Update reference results for static analyzer.
7 from ProjectMap
import ProjectInfo
, ProjectMap
13 from subprocess
import check_call
18 def update_reference_results(project
: ProjectInfo
, git
: bool = False):
19 test_info
= SATestBuild
.TestInfo(project
)
20 tester
= SATestBuild
.ProjectTester(test_info
)
21 project_dir
= tester
.get_project_dir()
23 tester
.is_reference_build
= True
24 ref_results_path
= tester
.get_output_dir()
26 tester
.is_reference_build
= False
27 created_results_path
= tester
.get_output_dir()
29 if not os
.path
.exists(created_results_path
):
30 print(f
"Skipping project '{project.name}', "
31 f
"it doesn't have newer results.",
35 build_log_path
= SATestBuild
.get_build_log_path(ref_results_path
)
36 build_log_dir
= os
.path
.dirname(os
.path
.abspath(build_log_path
))
38 os
.makedirs(build_log_dir
)
40 with
open(build_log_path
, "w+") as build_log_file
:
41 def run_cmd(command
: str):
43 print(f
"Executing {command}")
44 check_call(command
, shell
=True, stdout
=build_log_file
)
46 # Remove reference results: in git, and then again for a good measure
47 # with rm, as git might not remove things fully if there are empty
48 # directories involved.
50 run_cmd(f
"git rm -r -q '{ref_results_path}'")
51 shutil
.rmtree(ref_results_path
)
53 # Replace reference results with a freshly computed once.
54 shutil
.copytree(created_results_path
, ref_results_path
, symlinks
=True)
57 SATestBuild
.run_cleanup_script(project_dir
, build_log_file
)
59 SATestBuild
.normalize_reference_results(
60 project_dir
, ref_results_path
, project
.mode
)
62 # Clean up the generated difference results.
63 SATestBuild
.cleanup_reference_results(ref_results_path
)
66 run_cmd(f
"git add '{ref_results_path}'")
69 if __name__
== "__main__":
70 print("SATestUpdateDiffs.py should not be used on its own.")
71 print("Please use 'SATest.py update' instead")