Coverage for bugscpp/processor/core/argparser.py : 100%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1"""
2Provide common argparsers
4Utility functions to parse command line arguments and argparsers used across modules are defined.
5"""
6import argparse
7from pathlib import Path
9from taxonomy import Taxonomy
11from .data import NAMESPACE_ATTR_BUGGY, NAMESPACE_ATTR_INDEX, NAMESPACE_ATTR_WORKSPACE
12from .validator.common_command import ValidateCompilationDBTool
13from .validator.project_command import (ValidateBuggy, ValidateEnviron, ValidateIndex, ValidateProjectPath,
14 ValidateTaxonomy, ValidateWorkspace)
17def create_common_parser() -> argparse.ArgumentParser:
18 """
19 Returns argparse.ArgumentParser that parses common options.
21 Returns
22 -------
23 argparse.ArgumentParser
24 Return argparse.ArgumentParser that parses common options.
25 """
26 parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter)
27 parser.add_argument(
28 "--compilation_db_tool",
29 type=str,
30 help="command to capture build. (default: bear)",
31 action=ValidateCompilationDBTool,
32 )
33 return parser
36def create_common_vcs_parser() -> argparse.ArgumentParser:
37 """
38 Create an argparse.ArgumentParser that parses common vcs options.
40 Returns
41 -------
42 argparse.ArgumentParser
43 Return argparse.ArgumentParser that parses common taxonomy options.
44 Its namespace also provides 'worktree' attribute for convenience.
45 """
46 parser = create_common_parser()
47 t = Taxonomy()
48 parser.add_argument(
49 "project",
50 type=lambda s: s.lower(),
51 help="name of defect taxonomy.",
52 choices=[name for name in t],
53 action=ValidateTaxonomy,
54 )
55 parser.add_argument(
56 NAMESPACE_ATTR_INDEX,
57 type=int,
58 help="index of defects.",
59 action=ValidateIndex,
60 )
61 parser.add_argument(
62 "-b",
63 "--buggy",
64 dest=NAMESPACE_ATTR_BUGGY,
65 help="checkout a buggy commit.",
66 nargs=0,
67 action=ValidateBuggy,
68 )
69 # 'dest', 'root', 'workspace', 'checkout_directory'...
70 parser.add_argument(
71 "-t",
72 "--target",
73 dest=NAMESPACE_ATTR_WORKSPACE,
74 type=str,
75 help="checkout to the specified directory instead of the current directory.",
76 action=ValidateWorkspace,
77 )
78 parser.add_argument(
79 "-s",
80 "--source-only",
81 dest="source_only",
82 help="checkout source code only.",
83 action="store_true",
84 )
85 parser.add_argument(
86 "-v",
87 "--verbose",
88 dest="verbose",
89 help="verbose mode",
90 action="store_true",
91 )
92 return parser
95def create_common_project_parser() -> argparse.ArgumentParser:
96 """
97 Create an argparse.ArgumentParser that parses common project options.
98 'path' is path to the existing directory with defects4cpp configuration which has been already checkout.
100 Returns
101 -------
102 argparse.ArgumentParser
103 Return argparse.ArgumentParser that parses common project options.
104 """
105 parser = create_common_parser()
106 parser.add_argument(
107 "path",
108 type=Path,
109 help="path to checkout directory.",
110 action=ValidateProjectPath,
111 )
112 parser.add_argument(
113 "-v",
114 "--verbose",
115 dest="verbose",
116 help="redirect output to stdout.",
117 action="store_true",
118 )
119 parser.add_argument(
120 "--coverage",
121 dest="coverage",
122 help="set coverage flags.",
123 action="store_true",
124 )
125 parser.add_argument(
126 "--rebuild-image",
127 dest="rebuild_image",
128 help="rebuild docker image.",
129 action="store_true",
130 )
131 parser.add_argument(
132 "--env",
133 type=str,
134 dest="env",
135 nargs=1,
136 help="set 'key=value' environment variables within container. (can be used multiple times)",
137 action=ValidateEnviron,
138 )
139 parser.add_argument(
140 "-j", "--jobs", type=int, help="number of jobs to run in parallel.", default=1
141 )
142 return parser