[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