view bin/runtreepkg.py @ 407:fb473f67345b treepkg-status

implemented parsing from xml string
author Bjoern Ricks <bricks@intevation.de>
date Wed, 21 Jul 2010 15:52:15 +0000
parents 5f442b0cf3a4
children de78084fcbce
line wrap: on
line source
#! /usr/bin/python
# Copyright (C) 2007, 2008, 2009 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.

"""Starts the tree packager"""

import sys
import os
import logging
from optparse import OptionParser

import treepkgcmd
from treepkg.options import create_parser
from treepkg.packager import create_package_track, PackagerGroup
from treepkg.readconfig import read_config

def initialize_logging():
    """Initializes the logging system"""
    root = logging.getLogger()
    root.setLevel(logging.DEBUG)
    hdlr = logging.StreamHandler()
    fmt = logging.Formatter("%(asctime)s %(levelname)s %(message)s")
    hdlr.setFormatter(fmt)
    root.addHandler(hdlr)

def handle_track_option(option, opt_str, value, parser):
    parsed_options = parser.values.track_options
    track_optname, value = value.split("=", 1)
    trackname, optname = track_optname.split(".")
    track_options = parsed_options.setdefault(trackname, dict())
    track_options[optname] = value

def parse_commandline():
    parser = create_parser()
    parser.set_defaults(track_options=dict())
    parser.add_option("--once", action="store_true",
                      help=("Check the packagers only once and exit afterwards."
                            " Without this option, the tree packager will"
                            " check periodically."))
    parser.add_option("--stop-on-error", action="store_true",
                      help=("Stop the tree packager when a packaging"
                            " attempt fails."))
    parser.add_option("--revision",
                      help=("SVN revision to update to before attempting"
                            " to package."))
    parser.add_option("--no-svn-update", action="store_true",
                      help=("Do not update the SVN workingcopy before"
                            " attempting to package."))
    parser.add_option("--track-option", action="callback", type="string",
                      callback=handle_track_option,
                      help=("Sets a track-specific option."
                            " The argument should be of the form"
                            " TRACKNAME.OPTION=VALUE"))
    return parser.parse_args()

def main():
    options, args = parse_commandline()

    initialize_logging()

    treepkg_opts, packager_opts = read_config(options.config_file)

    if args:
        selected_tracks = set(args)
    else:
        selected_tracks = set(opts["name"] for opts in packager_opts)

    for opts in packager_opts:
        name = opts["name"]
        opts["do_build"] = name in selected_tracks
        selected_tracks.discard(name)
        if name in options.track_options:
            opts.update(options.track_options[name])
    for name in selected_tracks:
        print >>sys.stderr, "No package track found named %r" % name

    if packager_opts:
        group = PackagerGroup([create_package_track(**opts)
                               for opts in packager_opts],
                              revision=options.revision,
                              do_svn_update=not options.no_svn_update,
                              stop_on_error=options.stop_on_error,
                              **treepkg_opts)
        if options.once:
            group.check_package_tracks()
        else:
            group.run()

main()
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)