Mercurial > bitten > bitten-test
annotate 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 |
rev | line source |
---|---|
0 | 1 #!/usr/bin/env python |
5 | 2 # -*- coding: iso8859-1 -*- |
3 # | |
4 # Copyright (C) 2005 Christopher Lenz <cmlenz@gmx.de> | |
163 | 5 # All rights reserved. |
5 | 6 # |
163 | 7 # This software is licensed as described in the file COPYING, which |
8 # you should have received as part of this distribution. The terms | |
9 # are also available at http://bitten.cmlenz.net/wiki/License. | |
0 | 10 |
103
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
11 import itertools |
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
12 import logging |
4 | 13 import sys |
0 | 14 |
61
47ab019508dd
Moved {{{BuildError}}} class into package {{{bitten.build}}}.
cmlenz
parents:
60
diff
changeset
|
15 from bitten.build import BuildError |
4 | 16 from bitten.recipe import Recipe |
148
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
17 from bitten.util import xmlio |
4 | 18 |
103
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
19 def main(): |
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
20 from bitten import __version__ as VERSION |
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
21 from optparse import OptionParser |
4 | 22 |
103
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
23 parser = OptionParser(usage='usage: %prog [options] [step1] [step2] ...', |
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
24 version='%%prog %s' % VERSION) |
148
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
25 parser.add_option('-f', '--recipe-file', action='store', dest='recipe_file', |
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
26 metavar='FILE', help='read build recipe from FILE') |
240
24e91cbae6e0
New recipe command `<java:ant>` for running Ant builds.
cmlenz
parents:
203
diff
changeset
|
27 parser.add_option('--print-logs', action='store_const', |
24e91cbae6e0
New recipe command `<java:ant>` for running Ant builds.
cmlenz
parents:
203
diff
changeset
|
28 dest='print_logs', const=True, |
24e91cbae6e0
New recipe command `<java:ant>` for running Ant builds.
cmlenz
parents:
203
diff
changeset
|
29 help='print build logs') |
144
76dea27af878
* Make the `<python:unittest>` command strip the base dir from file names in the report. Fixes #42.
cmlenz
parents:
131
diff
changeset
|
30 parser.add_option('--print-reports', action='store_const', |
76dea27af878
* Make the `<python:unittest>` command strip the base dir from file names in the report. Fixes #42.
cmlenz
parents:
131
diff
changeset
|
31 dest='print_reports', const=True, |
76dea27af878
* Make the `<python:unittest>` command strip the base dir from file names in the report. Fixes #42.
cmlenz
parents:
131
diff
changeset
|
32 help='print generated reports') |
103
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
33 parser.add_option('-v', '--verbose', action='store_const', dest='loglevel', |
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
34 const=logging.DEBUG, help='print as much as possible') |
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
35 parser.add_option('-q', '--quiet', action='store_const', dest='loglevel', |
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
36 const=logging.ERROR, help='print as little as possible') |
148
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
37 parser.set_defaults(loglevel=logging.INFO, recipe_file='recipe.xml') |
103
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
38 options, args = parser.parse_args() |
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
39 |
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
40 log = logging.getLogger('bitten') |
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
41 log.setLevel(options.loglevel) |
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
42 handler = logging.StreamHandler() |
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
43 handler.setLevel(options.loglevel) |
109
5bf22bb87915
Transmit build log and generated data back to the build master in XML format. Closes #23.
cmlenz
parents:
103
diff
changeset
|
44 formatter = logging.Formatter('%(message)s') |
103
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
45 handler.setFormatter(formatter) |
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
46 log.addHandler(handler) |
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
47 |
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
48 steps_to_run = dict([(step, False) for step in args]) |
148
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
49 |
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
50 recipe_file = file(options.recipe_file, 'r') |
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
51 try: |
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
52 recipe = Recipe(xmlio.parse(recipe_file)) |
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
53 for step in recipe: |
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
54 if not steps_to_run or step.id in steps_to_run: |
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
55 print |
153 | 56 print '-->', step.id |
203
e6ddca1e5712
Huge refactoring to remove dependency on BDB XML. Report data is now stored in the Trac database (SQLite/PostgreSQL).
cmlenz
parents:
163
diff
changeset
|
57 for type, category, generator, output in step.execute(recipe.ctxt): |
148
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
58 if type == Recipe.ERROR: |
245
a22ec8fce6c9
Store the reason(s) for build step failure in the database.
cmlenz
parents:
240
diff
changeset
|
59 log.error(output) |
240
24e91cbae6e0
New recipe command `<java:ant>` for running Ant builds.
cmlenz
parents:
203
diff
changeset
|
60 elif type == Recipe.LOG and options.print_logs: |
24e91cbae6e0
New recipe command `<java:ant>` for running Ant builds.
cmlenz
parents:
203
diff
changeset
|
61 output.write(sys.stdout, newlines=True) |
148
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
62 elif type == Recipe.REPORT and options.print_reports: |
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
63 output.write(sys.stdout, newlines=True) |
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
64 if step.id in steps_to_run: |
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
65 steps_to_run[step.id] = True |
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
66 finally: |
f3f5895e373c
Fixes to problems in recipe handling introduced in [155].
cmlenz
parents:
144
diff
changeset
|
67 recipe_file.close() |
0 | 68 |
69 if __name__ == '__main__': | |
4 | 70 try: |
103
f1baf05a49dd
* Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents:
72
diff
changeset
|
71 main() |
4 | 72 except BuildError, e: |
153 | 73 print |
8 | 74 print>>sys.stderr, 'FAILED: %s' % e |
4 | 75 sys.exit(-1) |
153 | 76 print |
8 | 77 print 'SUCCESS' |