[Treepkg-commits] r102 - trunk/bin

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Tue Jun 24 19:52:14 CEST 2008


Author: bh
Date: 2008-06-24 19:52:14 +0200 (Tue, 24 Jun 2008)
New Revision: 102

Added:
   trunk/bin/treepkgbuilder.py
Log:
Add bin/treepkgbuilder.py, a script to manage treepkg's pbuilder instance


Added: trunk/bin/treepkgbuilder.py
===================================================================
--- trunk/bin/treepkgbuilder.py	2008-06-24 15:10:39 UTC (rev 101)
+++ trunk/bin/treepkgbuilder.py	2008-06-24 17:52:14 UTC (rev 102)
@@ -0,0 +1,137 @@
+#! /usr/bin/python2.4
+# Copyright (C) 2007, 2008 by Intevation GmbH
+# Authors:
+# Bernhard Herzog <bh at 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()


Property changes on: trunk/bin/treepkgbuilder.py
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + native



More information about the Treepkg-commits mailing list