X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fdak.py;h=5a986d55ef39cb11b20bef0246c97a36d9d43967;hb=86de24686031e6971970bf609e1a48f2e77f1142;hp=abea91ac672c5c292d073fb366aa419256e8d3f5;hpb=b893898166959e406c868d5f922f10b5eceb6d77;p=dak.git diff --git a/dak/dak.py b/dak/dak.py index abea91ac..5a986d55 100755 --- a/dak/dak.py +++ b/dak/dak.py @@ -28,8 +28,48 @@ ################################################################################ -import sys -import daklib.utils +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 + + 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 ################################################################################ @@ -46,17 +86,19 @@ def init(): "Archive sanity checks"), ("queue-report", "Produce a report on NEW and BYHAND packages"), - + ("show-new", + "Output html for packages in NEW"), + ("rm", "Remove packages from suites"), - + ("process-new", "Process NEW and BYHAND packages"), ("process-unchecked", "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"), ("generate-releases", @@ -69,7 +111,9 @@ def init(): "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", @@ -90,6 +134,8 @@ def init(): "Check for users with no packages in the archive"), ("import-archive", "Populate SQL database based from an archive tree"), + ("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", @@ -110,6 +156,8 @@ def init(): "Manually reject from proposed-updates"), ("security-install", "Install a security upload into the archive"), + ("new-security-install", + "New way to install a security upload into the archive"), ("split-done", "Split queue/done into a date-based hierarchy"), ("stats", @@ -118,7 +166,7 @@ def init(): "Generate compatability symlinks from dists/ into pool/"), ] return functionality - + ################################################################################ def usage(functionality, exit_code=0): @@ -137,9 +185,16 @@ Availble 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() + functionality = init() modules = [ command for (command, _) in functionality ] - + if len(sys.argv) == 0: daklib.utils.fubar("err, argc == 0? how is that possible?") elif (len(sys.argv) == 1 @@ -173,6 +228,13 @@ 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() ################################################################################