Hide keyboard shortcuts

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 

3 

4Utility functions to parse command line arguments and argparsers used across modules are defined. 

5""" 

6import argparse 

7from pathlib import Path 

8 

9from taxonomy import Taxonomy 

10 

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) 

15 

16 

17def create_common_parser() -> argparse.ArgumentParser: 

18 """ 

19 Returns argparse.ArgumentParser that parses common options. 

20 

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 

34 

35 

36def create_common_vcs_parser() -> argparse.ArgumentParser: 

37 """ 

38 Create an argparse.ArgumentParser that parses common vcs options. 

39 

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 

93 

94 

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. 

99 

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