--- /dev/null
+#!/usr/bin/env python
+
+# Launch dak functionality
+# Copyright (c) 2005 Anthony Towns <ajt@debian.org>
+# $Id: dak,v 1.1 2005-11-17 08:47:31 ajt Exp $
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+################################################################################
+
+# well I don't know where you're from but in AMERICA, there's a little
+# thing called "abstinent until proven guilty."
+# -- http://harrietmiers.blogspot.com/2005/10/wow-i-feel-loved.html
+
+# (if James had a blog, I bet I could find a funny quote in it to use!)
+
+################################################################################
+
+import sys
+
+################################################################################
+
+# maps a command name to a module name
+functionality = [
+ ("ls", "Show which suites packages are in",
+ ("madison", "main"), ["madison"]),
+ ("rm", "Remove packages from suites", "melanie"),
+
+ ("decode-dot-dak", "Display contents of a .katie file", "ashley"),
+ ("override", "Query/change the overrides", "alicia"),
+
+ ("install", "Install a package from accepted (security only)",
+ "amber"), # XXX - hmm (ajt)
+ ("reject-proposed-updates", "Manually reject from proposed-updates", "lauren"),
+ ("process-new", "Process NEW and BYHAND packages", "lisa"),
+
+ ("control-overrides", "Manipulate/list override entries in bulk",
+ "natalie"),
+ ("control-suite", "Manipulate suites in bulk", "heidi"),
+
+ ("stats", "Generate stats pr0n", "saffron"),
+ ("cruft-report", "Check for obsolete or duplicated packages",
+ "rene"),
+ ("queue-report", "Produce a report on NEW and BYHAND packages",
+ "helena"),
+ ("compare-suites", "Show fixable discrepencies between suites",
+ "andrea"),
+
+ ("check-archive", "Archive sanity checks", "tea"),
+ ("check-overrides", "Override cruft checks", "cindy"),
+ ("check-proposed-updates", "Dependency checking for proposed-updates",
+ "jeri"),
+
+ ("examine-package", "Show information useful for NEW processing",
+ "fernanda"),
+
+ ("init-db", "Update the database to match the conf file",
+ "alyson"),
+ ("init-dirs", "Initial setup of the archive", "rose"),
+ ("import-archive", "Populate SQL database based from an archive tree",
+ "neve"),
+
+ ("poolize", "Move packages from dists/ to pool/", "catherine"),
+ ("symlink-dists", "Generate compatability symlinks from dists/",
+ "claire"),
+
+ ("process-unchecked", "Process packages in queue/unchecked", "jennifer"),
+
+ ("process-accepted", "Install packages into the pool", "kelly"),
+ ("generate-releases", "Generate Release files", "ziyi"),
+ ("generate-index-diffs", "Generate .diff/Index files", "tiffani"),
+
+ ("make-suite-file-list",
+ "Generate lists of packages per suite for apt-ftparchive", "jenna"),
+ ("make-maintainers", "Generates Maintainers file for BTS etc",
+ "charisma"),
+ ("make-overrides", "Generates override files", "denise"),
+
+ ("mirror-split", "Split the pool/ by architecture groups",
+ "billie"),
+
+ ("clean-proposed-updates", "Remove obsolete .changes from proposed-updates",
+ "halle"),
+ ("clean-queues", "Clean cruft from incoming", "shania"),
+ ("clean-suites",
+ "Clean unused/superseded packages from the archive", "rhona"),
+
+ ("split-done", "Split queue/done into a data-based hierarchy",
+ "nina"),
+
+ ("import-ldap-fingerprints",
+ "Syncs fingerprint and uid tables with Debian LDAP db", "emilie"),
+ ("import-users-from-passwd",
+ "Sync PostgreSQL users with passwd file", "julia"),
+ ("find-null-maintainers",
+ "Check for users with no packages in the archive", "rosamund"),
+]
+
+names = {}
+for f in functionality:
+ if isinstance(f[2], str):
+ names[f[2]] = names[f[0]] = (f[2], "main")
+ else:
+ names[f[0]] = f[2]
+ for a in f[3]: names[a] = f[2]
+
+################################################################################
+
+def main():
+ if len(sys.argv) == 0:
+ print "err, argc == 0? how is that possible?"
+ sys.exit(1);
+ elif len(sys.argv) == 1 or (len(sys.argv) == 2 and sys.argv[1] == "--help"):
+ print "Sub commands:"
+ for f in functionality:
+ print " %-23s %s" % (f[0], f[1])
+ sys.exit(0);
+ else:
+ # should set PATH based on sys.argv[0] maybe
+ # possibly should set names based on sys.argv[0] too
+ sys.path = [sys.path[0]+"/py-symlinks"] + sys.path
+
+ cmdname = sys.argv[0]
+ cmdname = cmdname[cmdname.rfind("/")+1:]
+ if cmdname in names:
+ pass # invoke directly
+ else:
+ cmdname = sys.argv[1]
+ sys.argv = [sys.argv[0] + " " + sys.argv[1]] + sys.argv[2:]
+ if cmdname not in names:
+ match = []
+ for f in names:
+ if f.startswith(cmdname):
+ match.append(f)
+ if len(match) == 1:
+ cmdname = match[0]
+ elif len(match) > 1:
+ print "ambiguous command: %s" % ", ".join(match)
+ sys.exit(1);
+ else:
+ print "unknown command \"%s\"" % (cmdname)
+ sys.exit(1);
+
+ func = names[cmdname]
+ x = __import__(func[0])
+ x.__getattribute__(func[1])()
+
+if __name__ == "__main__":
+ main()
+