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
):
31 f
"Skipping project '{project.name}', " f
"it doesn't have newer results.",
36 build_log_path
= SATestBuild
.get_build_log_path(ref_results_path
)
37 build_log_dir
= os
.path
.dirname(os
.path
.abspath(build_log_path
))
39 os
.makedirs(build_log_dir
)
41 with
open(build_log_path
, "w+") as build_log_file
:
43 def run_cmd(command
: str):
45 print(f
"Executing {command}")
46 check_call(command
, shell
=True, stdout
=build_log_file
)
48 # Remove reference results: in git, and then again for a good measure
49 # with rm, as git might not remove things fully if there are empty
50 # directories involved.
52 run_cmd(f
"git rm -r -q '{ref_results_path}'")
53 shutil
.rmtree(ref_results_path
)
55 # Replace reference results with a freshly computed once.
56 shutil
.copytree(created_results_path
, ref_results_path
, symlinks
=True)
59 SATestBuild
.run_cleanup_script(project_dir
, build_log_file
)
61 SATestBuild
.normalize_reference_results(
62 project_dir
, ref_results_path
, project
.mode
65 # Clean up the generated difference results.
66 SATestBuild
.cleanup_reference_results(ref_results_path
)
69 run_cmd(f
"git add '{ref_results_path}'")
72 if __name__
== "__main__":
73 print("SATestUpdateDiffs.py should not be used on its own.")
74 print("Please use 'SATest.py update' instead")