]> git.decadent.org.uk Git - dak.git/blobdiff - dak/dak.py
Adjust to deal with the new Debian supplementaryGid
[dak.git] / dak / dak.py
index dc7aa1e373a630584b81a95d8797c0d07824bb71..32ddd62f1b9fae5ea918cf09ad92b06c9de64370 100755 (executable)
@@ -1,6 +1,11 @@
 #!/usr/bin/env python
 
-"""Wrapper to launch dak functionality"""
+"""
+Wrapper to launch dak functionality
+
+G{importgraph}
+
+"""
 # Copyright (C) 2005, 2006 Anthony Towns <ajt@debian.org>
 # Copyright (C) 2006 James Troup <james@nocrew.org>
 
 
 ################################################################################
 
-import sys, imp
-import daklib.utils, daklib.extensions
-
-################################################################################
-
-class UserExtension:
-    def __init__(self, user_extension = None):
-        if user_extension:
-            m = imp.load_source("dak_userext", user_extension)
-            d = m.__dict__
-        else:
-            m, d = None, {}
-        self.__dict__["_module"] = m
-        self.__dict__["_d"] = d
-
-    def __getattr__(self, a):
-        if a in self.__dict__: return self.__dict__[a]
-        if a[0] == "_": raise AttributeError, a
-        return self._d.get(a, None)
-
-    def __setattr__(self, a, v):
-        self._d[a] = v
-
-################################################################################
-
-class UserExtension:
-    def __init__(self, user_extension = None):
-        if user_extension:
-            m = imp.load_source("dak_userext", user_extension)
-            d = m.__dict__
-        else:
-            m, d = None, {}
-        self.__dict__["_module"] = m
-        self.__dict__["_d"] = d
+import os
+import sys
+import traceback
+import daklib.utils
 
-    def __getattr__(self, a):
-        if a in self.__dict__: return self.__dict__[a]
-        if a[0] == "_": raise AttributeError, a
-        return self._d.get(a, None)
-
-    def __setattr__(self, a, v):
-        self._d[a] = v
+from daklib.daklog import Logger
+from daklib.config import Config
+from daklib.dak_exceptions import CantOpenError
 
 ################################################################################
 
@@ -90,60 +61,74 @@ def init():
          "Output html for packages in NEW"),
         ("show-deferred",
          "Output html and symlinks for packages in DEFERRED"),
+        ("graph",
+         "Output graphs of number of packages in various queues"),
 
         ("rm",
          "Remove packages from suites"),
 
         ("process-new",
          "Process NEW and BYHAND packages"),
-        ("process-unchecked",
+        ("process-upload",
          "Process packages in queue/unchecked"),
-        ("process-accepted",
-         "Install packages into the pool"),
-
-        ("make-suite-file-list",
-         "Generate lists of packages per suite for apt-ftparchive"),
+        ("process-commands",
+         "Process command files (*.dak-commands)"),
+        ("process-policy",
+         "Process packages in policy queues from COMMENTS files"),
+
+        ("dominate",
+         "Remove obsolete source and binary associations from suites"),
+        ("export",
+         "Export uploads from policy queues"),
+        ("export-suite",
+         "export a suite to a flat directory structure"),
+        ("make-pkg-file-mapping",
+         "Generate package <-> file mapping"),
         ("generate-releases",
          "Generate Release files"),
+        ("generate-packages-sources2",
+         "Generate Packages/Sources files"),
+        ("contents",
+         "Generate content files"),
+        ("metadata",
+         "Load data for packages/sources files"),
         ("generate-index-diffs",
          "Generate .diff/Index files"),
         ("clean-suites",
          "Clean unused/superseded packages from the archive"),
+        ("manage-build-queues",
+         "Clean and update metadata for build queues"),
         ("clean-queues",
          "Clean cruft from incoming"),
-        ("clean-proposed-updates",
-         "Remove obsolete .changes from proposed-updates"),
 
         ("transitions",
          "Manage the release transition file"),
         ("check-overrides",
          "Override cruft checks"),
-        ("check-proposed-updates",
-         "Dependency checking for proposed-updates"),
-        ("compare-suites",
-         "Show fixable discrepencies between suites"),
         ("control-overrides",
          "Manipulate/list override entries in bulk"),
         ("control-suite",
          "Manipulate suites in bulk"),
+        ("update-suite",
+         "Update suite with packages from a different suite"),
         ("cruft-report",
          "Check for obsolete or duplicated packages"),
-        ("decode-dot-dak",
-         "Display contents of a .dak file"),
+        ("auto-decruft",
+         "Clean cruft without reverse dependencies automatically"),
         ("examine-package",
          "Show information useful for NEW processing"),
-        ("find-null-maintainers",
-         "Check for users with no packages in the archive"),
-        ("import-archive",
-         "Populate SQL database based from an archive tree"),
+        ("import",
+         "Import existing source and binary packages"),
+        ("import-repository",
+         "Import packages from another repository"),
         ("import-keyring",
          "Populate fingerprint/uid table based on a new/updated keyring"),
-        ("import-ldap-fingerprints",
-         "Syncs fingerprint and uid tables with Debian LDAP db"),
         ("import-users-from-passwd",
          "Sync PostgreSQL users with passwd file"),
-        ("init-db",
-         "Update the database to match the conf file"),
+        ("acl",
+         "Manage upload ACLs"),
+        ("admin",
+         "Perform administration on the dak database"),
         ("update-db",
          "Updates databae schema to latest revision"),
         ("init-dirs",
@@ -152,18 +137,22 @@ def init():
          "Generates Maintainers file for BTS etc"),
         ("make-overrides",
          "Generates override files"),
-        ("poolize",
-         "Move packages from dists/ to pool/"),
-        ("reject-proposed-updates",
-         "Manually reject from proposed-updates"),
         ("new-security-install",
          "New way to install a security upload into the archive"),
-        ("split-done",
-         "Split queue/done into a date-based hierarchy"),
         ("stats",
          "Generate statistics"),
         ("bts-categorize",
          "Categorize uncategorized bugs filed against ftp.debian.org"),
+        ("add-user",
+         "Add a user to the archive"),
+        ("make-changelog",
+         "Generate changelog between two suites"),
+        ("copy-installer",
+         "Copies the installer from one suite to another"),
+        ("override-disparity",
+         "Generate a list of override disparities"),
+        ("external-overrides",
+         "Modify external overrides"),
         ]
     return functionality
 
@@ -185,12 +174,11 @@ Available commands:"""
 def main():
     """Launch dak functionality."""
 
-    Cnf = daklib.utils.get_conf()
 
-    if Cnf.has_key("Dinstall::UserExtensions"):
-        userext = UserExtension(Cnf["Dinstall::UserExtensions"])
-    else:
-        userext = UserExtension()
+    try:
+        logger = Logger('dak top-level', print_starting=False)
+    except CantOpenError:
+        logger = None
 
     functionality = init()
     modules = [ command for (command, _) in functionality ]
@@ -229,15 +217,25 @@ def main():
     # Invoke the module
     module = __import__(cmdname.replace("-","_"))
 
-    module.dak_userext = userext
-    userext.dak_module = module
-
-    daklib.extensions.init(cmdname, module, userext)
-    if userext.init is not None: userext.init(cmdname)
-
-    module.main()
+    try:
+        module.main()
+    except KeyboardInterrupt:
+        msg = 'KeyboardInterrupt caught; exiting'
+        print msg
+        if logger:
+            logger.log([msg])
+        sys.exit(1)
+    except SystemExit:
+        pass
+    except:
+        if logger:
+            for line in traceback.format_exc().split('\n')[:-1]:
+                logger.log(['exception', line])
+        raise
 
 ################################################################################
 
 if __name__ == "__main__":
+    os.environ['LANG'] = 'C'
+    os.environ['LC_ALL'] = 'C'
     main()