changeset 177:df7498d0bd9d

Add bin/treepkgbuilder.py, a script to manage treepkg's pbuilder instance
author Bernhard Herzog <bh@intevation.de>
date Tue, 24 Jun 2008 17:52:14 +0000
parents 7bde59aa611e
children b2fa3b0926d0
files bin/treepkgbuilder.py
diffstat 1 files changed, 137 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/treepkgbuilder.py	Tue Jun 24 17:52:14 2008 +0000
@@ -0,0 +1,137 @@
+#! /usr/bin/python2.4
+# Copyright (C) 2007, 2008 by Intevation GmbH
+# Authors:
+# Bernhard Herzog <bh@intevation.de>
+#
+# This program is free software under the GPL (>=v2)
+# Read the file COPYING coming with the software for details.
+
+"""Usage: treepkgbuilder COMMAND [options]
+
+Manage the pbuilder environment for a tree packager installation.  The
+pbuilder settings are taken from the configuration file, either the
+default treepkg.cfg or the one given with the --config-file option.
+Also, this script assumes that there is only one pbuilder setting for
+all packagers.  Use treepkgbuilder COMMAND --help for more details about
+the commands.
+"""
+
+import sys
+
+import treepkgcmd
+from treepkg.options import create_parser
+from treepkg.packager import create_package_track, PackagerGroup
+from treepkg.readconfig import read_config
+
+
+class Command(object):
+
+    names = ()
+
+    def __init__(self, arguments):
+        parser = self.create_parser()
+        self.opts, self.rest = parser.parse_args(arguments)
+
+    def create_parser(self):
+        return create_parser()
+
+    def read_config(self):
+        self.treepkg_opts, self.packager_opts \
+                           = read_config(self.opts.config_file)
+
+    def get_builder(self):
+        self.read_config()
+        group = PackagerGroup([create_package_track(**opts)
+                               for opts in self.packager_opts],
+                              **self.treepkg_opts)
+        track = group.get_package_tracks()[0]
+        return track.builder
+
+
+
+class InitCommand(Command):
+
+    names = ("init",)
+
+    def __init__(self, arguments):
+        super(InitCommand, self).__init__(arguments)
+        if self.opts.mirrorsite is None:
+            print >>sys.stderr, "Missing required option --mirrorsite"
+            sys.exit(1)
+
+    def create_parser(self):
+        parser = super(InitCommand, self).create_parser()
+        parser.set_defaults(distribution="etch")
+        parser.add_option("--mirrorsite",
+                          help=("The debian mirror site"
+                                " (pbuilder MIRRORSITE setting).  Required."))
+        parser.add_option("--othermirror",
+                          help=("Extra contents of the OTHERMIRROR setting."
+                                " See the pbuilder documentation for the"
+                                " format."))
+        parser.add_option("--distribution",
+                          help=("The debian distribution for the pbuilder"
+                                " chroot. Default is etch."))
+        return parser
+
+    def run(self):
+        builder = self.get_builder()
+        builder.init_pbuilder(distribution=self.opts.distribution,
+                              mirrorsite=self.opts.mirrorsite,
+                              extramirrors=self.opts.othermirror)
+
+
+class UpdateCommand(Command):
+
+    names = ("update",)
+
+    def run(self):
+        builder = self.get_builder()
+        builder.update(suppress_output=False, log_info=False)
+
+
+class HelpCommand(Command):
+
+    names = ("help", "--help", "-h")
+
+    def run(self):
+        print __doc__.rstrip()
+        print "Supported commands:"
+        commands = sorted((cmd for cmd in iter_commands() if cmd.names),
+                          key=lambda cmd: cmd.names[0])
+        for cmd in commands:
+            print "   ", " ".join(cmd.names)
+
+
+def iter_commands():
+    for key, obj in globals().items():
+        if key.endswith("Command"):
+            yield obj
+
+def get_command_class(name):
+    for obj in iter_commands():
+        if name in obj.names:
+            return obj
+    return None
+
+
+def main():
+    arguments = sys.argv[1:]
+
+    if len(arguments) < 1:
+        print >>sys.stderr, "Missing command"
+        sys.exit(1)
+
+    command_name = arguments[0]
+    arguments = arguments[1:]
+
+    command_class = get_command_class(command_name)
+    if command_class is None:
+        print >>sys.stderr, "Unknown command %r" % command_name
+        sys.exit(1)
+
+    command = command_class(arguments)
+    command.run()
+
+
+main()
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)