1#! /usr/bin/env python3 

2 

3""" 

4Display information about package(s) (suite, version, etc.) 

5 

6@contact: Debian FTP Master <ftpmaster@debian.org> 

7@copyright: 2000, 2001, 2002, 2003, 2004, 2005, 2006 James Troup <james@nocrew.org> 

8@license: GNU General Public License version 2 or later 

9 

10""" 

11# This program is free software; you can redistribute it and/or modify 

12# it under the terms of the GNU General Public License as published by 

13# the Free Software Foundation; either version 2 of the License, or 

14# (at your option) any later version. 

15 

16# This program is distributed in the hope that it will be useful, 

17# but WITHOUT ANY WARRANTY; without even the implied warranty of 

18# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

19# GNU General Public License for more details. 

20 

21# You should have received a copy of the GNU General Public License 

22# along with this program; if not, write to the Free Software 

23# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 

24 

25################################################################################ 

26 

27# <aj> ooo, elmo has "special powers" 

28# <neuro> ooo, does he have lasers that shoot out of his eyes? 

29# <aj> dunno 

30# <aj> maybe he can turn invisible? that'd sure help with improved transparency! 

31 

32################################################################################ 

33 

34import sys 

35 

36import apt_pkg 

37 

38from daklib import utils 

39from daklib.config import Config 

40from daklib.ls import list_packages 

41 

42################################################################################ 

43 

44 

45def usage(exit_code=0): 

46 print( 

47 """Usage: dak ls [OPTION] PACKAGE[...] 

48Display information about PACKAGE(s). 

49 

50 -a, --architecture=ARCH only show info for ARCH(s) 

51 -b, --binary-type=TYPE only show info for binary TYPE 

52 -c, --component=COMPONENT only show info for COMPONENT(s) 

53 -g, --greaterorequal show buildd 'dep-wait pkg >= {highest version}' info 

54 -G, --greaterthan show buildd 'dep-wait pkg >> {highest version}' info 

55 -h, --help show this help and exit 

56 -r, --regex treat PACKAGE as a regex 

57 -s, --suite=SUITE only show info for this suite 

58 -S, --source-and-binary show info for the binary children of source pkgs 

59 -f, --format=control-suite use same format as control-suite for output 

60 

61ARCH, COMPONENT and SUITE can be comma (or space) separated lists, e.g. 

62 --architecture=amd64,i386""" 

63 ) 

64 sys.exit(exit_code) 

65 

66 

67################################################################################ 

68 

69 

70def main(): 

71 cnf = Config() 

72 

73 Arguments = [ 

74 ("a", "architecture", "Ls::Options::Architecture", "HasArg"), 

75 ("b", "binarytype", "Ls::Options::BinaryType", "HasArg"), 

76 ("c", "component", "Ls::Options::Component", "HasArg"), 

77 ("f", "format", "Ls::Options::Format", "HasArg"), 

78 ("g", "greaterorequal", "Ls::Options::GreaterOrEqual"), 

79 ("G", "greaterthan", "Ls::Options::GreaterThan"), 

80 ("r", "regex", "Ls::Options::Regex"), 

81 ("s", "suite", "Ls::Options::Suite", "HasArg"), 

82 ("S", "source-and-binary", "Ls::Options::Source-And-Binary"), 

83 ("h", "help", "Ls::Options::Help"), 

84 ] 

85 for i in [ 

86 "architecture", 

87 "binarytype", 

88 "component", 

89 "format", 

90 "greaterorequal", 

91 "greaterthan", 

92 "regex", 

93 "suite", 

94 "source-and-binary", 

95 "help", 

96 ]: 

97 key = "Ls::Options::%s" % i 

98 if key not in cnf: 98 ↛ 85line 98 didn't jump to line 85

99 cnf[key] = "" 

100 

101 packages = apt_pkg.parse_commandline(cnf.Cnf, Arguments, sys.argv) 

102 Options = cnf.subtree("Ls::Options") 

103 

104 if Options["Help"]: 

105 usage() 

106 if not packages: 106 ↛ 107line 106 didn't jump to line 107, because the condition on line 106 was never true

107 utils.fubar("need at least one package name as an argument.") 

108 

109 # Handle buildd maintenance helper options 

110 if Options["GreaterOrEqual"] or Options["GreaterThan"]: 110 ↛ 111line 110 didn't jump to line 111, because the condition on line 110 was never true

111 if Options["GreaterOrEqual"] and Options["GreaterThan"]: 

112 utils.fubar( 

113 "-g/--greaterorequal and -G/--greaterthan are mutually exclusive." 

114 ) 

115 if not Options["Suite"]: 

116 Options["Suite"] = "unstable" 

117 

118 kwargs = dict() 

119 

120 if Options["Regex"]: 120 ↛ 121line 120 didn't jump to line 121, because the condition on line 120 was never true

121 kwargs["regex"] = True 

122 if Options["Source-And-Binary"]: 

123 kwargs["source_and_binary"] = True 

124 if Options["Suite"]: 

125 kwargs["suites"] = utils.split_args(Options["Suite"]) 

126 if Options["Architecture"]: 126 ↛ 127line 126 didn't jump to line 127, because the condition on line 126 was never true

127 kwargs["architectures"] = utils.split_args(Options["Architecture"]) 

128 if Options["BinaryType"]: 128 ↛ 129line 128 didn't jump to line 129, because the condition on line 128 was never true

129 kwargs["binary_types"] = utils.split_args(Options["BinaryType"]) 

130 if Options["Component"]: 130 ↛ 131line 130 didn't jump to line 131, because the condition on line 130 was never true

131 kwargs["components"] = utils.split_args(Options["Component"]) 

132 

133 if Options["Format"]: 133 ↛ 134line 133 didn't jump to line 134, because the condition on line 133 was never true

134 kwargs["format"] = Options["Format"] 

135 if Options["GreaterOrEqual"]: 135 ↛ 136line 135 didn't jump to line 136, because the condition on line 135 was never true

136 kwargs["highest"] = ">=" 

137 elif Options["GreaterThan"]: 137 ↛ 138line 137 didn't jump to line 138, because the condition on line 137 was never true

138 kwargs["highest"] = ">>" 

139 

140 for line in list_packages(packages, **kwargs): 

141 print(line) 

142 

143 

144###################################################################################### 

145 

146 

147if __name__ == "__main__": 

148 main()