[clang] 4a7b3d4 - [analyzer] SATestAdd.py: Parse arguments with argparse
Valeriy Savchenko via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 16 03:31:21 PDT 2020
Author: Valeriy Savchenko
Date: 2020-06-16T13:30:00+03:00
New Revision: 4a7b3d406f1eca8c9bb8091f92da55ff2c72ab44
URL: https://github.com/llvm/llvm-project/commit/4a7b3d406f1eca8c9bb8091f92da55ff2c72ab44
DIFF: https://github.com/llvm/llvm-project/commit/4a7b3d406f1eca8c9bb8091f92da55ff2c72ab44.diff
LOG: [analyzer] SATestAdd.py: Parse arguments with argparse
Differential Revision: https://reviews.llvm.org/D81565
Added:
Modified:
clang/utils/analyzer/SATestAdd.py
Removed:
################################################################################
diff --git a/clang/utils/analyzer/SATestAdd.py b/clang/utils/analyzer/SATestAdd.py
index 83ff3d719ea1..7d68ef261dbf 100755
--- a/clang/utils/analyzer/SATestAdd.py
+++ b/clang/utils/analyzer/SATestAdd.py
@@ -45,18 +45,18 @@
import SATestBuild
from ProjectMap import ProjectMap, ProjectInfo
+import argparse
import os
import sys
-def add_new_project(name: str, build_mode: int):
+def add_new_project(project: ProjectInfo):
"""
Add a new project for testing: build it and add to the Project Map file.
:param name: is a short string used to identify a project.
"""
- project_info = ProjectInfo(name, build_mode)
- test_info = SATestBuild.TestInfo(project_info,
+ test_info = SATestBuild.TestInfo(project,
is_reference_build=True)
tester = SATestBuild.ProjectTester(test_info)
@@ -71,37 +71,55 @@ def add_new_project(name: str, build_mode: int):
# Add the project name to the project map.
project_map = ProjectMap(should_exist=False)
- if is_existing_project(project_map, name):
- print(f"Warning: Project with name '{name}' already exists.",
+ if is_existing_project(project_map, project):
+ print(f"Warning: Project with name '{project.name}' already exists.",
file=sys.stdout)
print("Reference output has been regenerated.", file=sys.stdout)
else:
- project_map.projects.append(project_info)
+ project_map.projects.append(project)
project_map.save()
-def is_existing_project(project_map: ProjectMap, project_name: str) -> bool:
- return any(existing_project.name == project_name
+def is_existing_project(project_map: ProjectMap, project: ProjectInfo) -> bool:
+ return any(existing_project.name == project.name
for existing_project in project_map.projects)
-# TODO: Use argparse
# TODO: Add an option not to build.
# TODO: Set the path to the Repository directory.
if __name__ == "__main__":
- if len(sys.argv) < 2 or sys.argv[1] in ("-h", "--help"):
- print("Add a new project for testing to the analyzer"
- "\nUsage: ", sys.argv[0],
- "project_ID <mode>\n"
- "mode: 0 for single file project, "
- "1 for scan_build, "
- "2 for single file c++11 project", file=sys.stderr)
- sys.exit(-1)
-
- build_mode = 1
- if len(sys.argv) >= 3:
- build_mode = int(sys.argv[2])
-
- assert((build_mode == 0) | (build_mode == 1) | (build_mode == 2))
-
- add_new_project(sys.argv[1], build_mode)
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument("name", nargs=1, help="Name of the new project")
+ parser.add_argument("--mode", action="store", default=1, type=int,
+ choices=[0, 1, 2],
+ help="Build mode: 0 for single file project, "
+ "1 for scan_build, "
+ "2 for single file c++11 project")
+ parser.add_argument("--source", action="store", default="script",
+ choices=["script", "git", "zip"],
+ help=f"Source type of the new project: "
+ f"'git' for getting from git "
+ f"(please provide --origin and --commit), "
+ f"'zip' for unpacking source from a zip file, "
+ f"'script' for downloading source by running "
+ f"a custom script {SATestBuild.DOWNLOAD_SCRIPT}")
+ parser.add_argument("--origin", action="store", default="",
+ help="Origin link for a git repository")
+ parser.add_argument("--commit", action="store", default="",
+ help="Git hash for a commit to checkout")
+
+ args = parser.parse_args()
+
+ if args.source == "git" and (args.origin == "" or args.commit == ""):
+ parser.error(
+ "Please provide both --origin and --commit if source is 'git'")
+
+ if args.source != "git" and (args.origin != "" or args.commit != ""):
+ parser.error("Options --origin and --commit don't make sense when "
+ "source is not 'git'")
+
+ project = ProjectInfo(args.name[0], args.mode, args.source, args.origin,
+ args.commit)
+
+ add_new_project(project)
More information about the cfe-commits
mailing list