Mercurial > bitten > bitten-test
view scripts/build.py @ 375:79262e20b073
Protect the main beep loop from exceptions-- either problems in callbacks or errors in the asyncore handlers, which can stop the scheduled events from getting run. Also move over to using the asyncore.loop function over the poll function-- using poll as we were seeing use_poll=False (the default) hang forever, making scheduled events not get run.
author | wbell |
---|---|
date | Mon, 23 Jul 2007 22:03:07 +0000 |
parents | a22ec8fce6c9 |
children | 0df178e07fdb |
line wrap: on
line source
#!/usr/bin/env python # -*- coding: iso8859-1 -*- # # Copyright (C) 2005 Christopher Lenz <cmlenz@gmx.de> # All rights reserved. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at http://bitten.cmlenz.net/wiki/License. import itertools import logging import sys from bitten.build import BuildError from bitten.recipe import Recipe from bitten.util import xmlio def main(): from bitten import __version__ as VERSION from optparse import OptionParser parser = OptionParser(usage='usage: %prog [options] [step1] [step2] ...', version='%%prog %s' % VERSION) parser.add_option('-f', '--recipe-file', action='store', dest='recipe_file', metavar='FILE', help='read build recipe from FILE') parser.add_option('--print-logs', action='store_const', dest='print_logs', const=True, help='print build logs') parser.add_option('--print-reports', action='store_const', dest='print_reports', const=True, help='print generated reports') parser.add_option('-v', '--verbose', action='store_const', dest='loglevel', const=logging.DEBUG, help='print as much as possible') parser.add_option('-q', '--quiet', action='store_const', dest='loglevel', const=logging.ERROR, help='print as little as possible') parser.set_defaults(loglevel=logging.INFO, recipe_file='recipe.xml') options, args = parser.parse_args() log = logging.getLogger('bitten') log.setLevel(options.loglevel) handler = logging.StreamHandler() handler.setLevel(options.loglevel) formatter = logging.Formatter('%(message)s') handler.setFormatter(formatter) log.addHandler(handler) steps_to_run = dict([(step, False) for step in args]) recipe_file = file(options.recipe_file, 'r') try: recipe = Recipe(xmlio.parse(recipe_file)) for step in recipe: if not steps_to_run or step.id in steps_to_run: print print '-->', step.id for type, category, generator, output in step.execute(recipe.ctxt): if type == Recipe.ERROR: log.error(output) elif type == Recipe.LOG and options.print_logs: output.write(sys.stdout, newlines=True) elif type == Recipe.REPORT and options.print_reports: output.write(sys.stdout, newlines=True) if step.id in steps_to_run: steps_to_run[step.id] = True finally: recipe_file.close() if __name__ == '__main__': try: main() except BuildError, e: print print>>sys.stderr, 'FAILED: %s' % e sys.exit(-1) print print 'SUCCESS'