4 Wrapper to launch dak functionality
9 # Copyright (C) 2005, 2006 Anthony Towns <ajt@debian.org>
10 # Copyright (C) 2006 James Troup <james@nocrew.org>
12 # This program is free software; you can redistribute it and/or modify
13 # it under the terms of the GNU General Public License as published by
14 # the Free Software Foundation; either version 2 of the License, or
15 # (at your option) any later version.
17 # This program is distributed in the hope that it will be useful,
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 # GNU General Public License for more details.
22 # You should have received a copy of the GNU General Public License
23 # along with this program; if not, write to the Free Software
24 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26 ################################################################################
28 # well I don't know where you're from but in AMERICA, there's a little
29 # thing called "abstinent until proven guilty."
30 # -- http://harrietmiers.blogspot.com/2005/10/wow-i-feel-loved.html
32 # (if James had a blog, I bet I could find a funny quote in it to use!)
34 ################################################################################
41 from daklib.daklog import Logger
42 from daklib.config import Config
43 from daklib.dak_exceptions import CantOpenError
45 ################################################################################
48 """Setup the list of modules and brief explanation of what they
53 "Show which suites packages are in"),
55 "Query/change the overrides"),
57 "Archive sanity checks"),
59 "Produce a report on NEW and BYHAND packages"),
61 "Output html for packages in NEW"),
63 "Output html and symlinks for packages in DEFERRED"),
65 "Output graphs of number of packages in various queues"),
68 "Remove packages from suites"),
71 "Process NEW and BYHAND packages"),
73 "Process packages in queue/unchecked"),
75 "Process packages in policy queues from COMMENTS files"),
78 "Remove obsolete source and binary associations from suites"),
79 ("make-pkg-file-mapping",
80 "Generate package <-> file mapping"),
82 "Generate file lists for apt-ftparchive"),
84 "Generate Release files"),
85 ("generate-packages-sources",
86 "Generate Packages/Sources files"),
88 "Generate content files"),
89 ("generate-index-diffs",
90 "Generate .diff/Index files"),
92 "Clean unused/superseded packages from the archive"),
93 ("manage-build-queues",
94 "Clean and update metadata for build queues"),
96 "Clean cruft from incoming"),
97 ("clean-proposed-updates",
98 "Remove obsolete .changes from proposed-updates"),
101 "Manage the release transition file"),
103 "Override cruft checks"),
104 ("check-proposed-updates",
105 "Dependency checking for proposed-updates"),
106 ("control-overrides",
107 "Manipulate/list override entries in bulk"),
109 "Manipulate suites in bulk"),
111 "Check for obsolete or duplicated packages"),
113 "Show information useful for NEW processing"),
114 ("find-null-maintainers",
115 "Check for users with no packages in the archive"),
117 "Populate fingerprint/uid table based on a new/updated keyring"),
118 ("import-ldap-fingerprints",
119 "Syncs fingerprint and uid tables with Debian LDAP db"),
120 ("import-users-from-passwd",
121 "Sync PostgreSQL users with passwd file"),
123 "Perform administration on the dak database"),
125 "Updates databae schema to latest revision"),
127 "Initial setup of the archive"),
129 "Generates Maintainers file for BTS etc"),
131 "Generates override files"),
133 "Move packages from dists/ to pool/"),
134 ("new-security-install",
135 "New way to install a security upload into the archive"),
137 "Split queue/done into a date-based hierarchy"),
139 "Generate statistics"),
141 "Categorize uncategorized bugs filed against ftp.debian.org"),
142 ("import-known-changes",
143 "import old changes files into known_changes table"),
145 "Add a user to the archive"),
147 "Generate changelog between two suites"),
149 "Copies the installer from one suite to another"),
150 ("override-disparity",
151 "Generate a list of override disparities"),
155 ################################################################################
157 def usage(functionality, exit_code=0):
158 """Print a usage message and exit with 'exit_code'."""
160 print """Usage: dak COMMAND [...]
161 Run DAK commands. (Will also work if invoked as COMMAND.)
163 Available commands:"""
164 for (command, description) in functionality:
165 print " %-23s %s" % (command, description)
168 ################################################################################
171 """Launch dak functionality."""
175 logger = Logger(Config(), 'dak top-level', print_starting=False)
176 except CantOpenError:
179 functionality = init()
180 modules = [ command for (command, _) in functionality ]
182 if len(sys.argv) == 0:
183 daklib.utils.fubar("err, argc == 0? how is that possible?")
184 elif (len(sys.argv) == 1
185 or (len(sys.argv) == 2 and
186 (sys.argv[1] == "--help" or sys.argv[1] == "-h"))):
189 # First see if we were invoked with/as the name of a module
190 cmdname = sys.argv[0]
191 cmdname = cmdname[cmdname.rfind("/")+1:]
192 if cmdname in modules:
194 # Otherwise the argument is the module
196 cmdname = sys.argv[1]
197 sys.argv = [sys.argv[0] + " " + sys.argv[1]] + sys.argv[2:]
198 if cmdname not in modules:
201 if name.startswith(cmdname):
206 daklib.utils.warn("ambiguous command '%s' - could be %s" \
207 % (cmdname, ", ".join(match)))
208 usage(functionality, 1)
210 daklib.utils.warn("unknown command '%s'" % (cmdname))
211 usage(functionality, 1)
214 module = __import__(cmdname.replace("-","_"))
218 except KeyboardInterrupt:
219 msg = 'KeyboardInterrupt caught; exiting'
228 for line in traceback.format_exc().split('\n')[:-1]:
229 logger.log(['exception', line])
232 ################################################################################
234 if __name__ == "__main__":
235 os.environ['LANG'] = 'C'
236 os.environ['LC_ALL'] = 'C'