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
0b2a3581c48d Import initial ''bitten'' source.
cmlenz
parents:
diff changeset
1 #!/usr/bin/env python
5
738a0ae251f6 Added GPL boilerplate.
cmlenz
parents: 4
diff changeset
2 # -*- coding: iso8859-1 -*-
738a0ae251f6 Added GPL boilerplate.
cmlenz
parents: 4
diff changeset
3 #
738a0ae251f6 Added GPL boilerplate.
cmlenz
parents: 4
diff changeset
4 # Copyright (C) 2005 Christopher Lenz <cmlenz@gmx.de>
163
634be6cbb808 Flip the switch: Bitten is now BSD-licensed.
cmlenz
parents: 153
diff changeset
5 # All rights reserved.
5
738a0ae251f6 Added GPL boilerplate.
cmlenz
parents: 4
diff changeset
6 #
163
634be6cbb808 Flip the switch: Bitten is now BSD-licensed.
cmlenz
parents: 153
diff changeset
7 # This software is licensed as described in the file COPYING, which
634be6cbb808 Flip the switch: Bitten is now BSD-licensed.
cmlenz
parents: 153
diff changeset
8 # you should have received as part of this distribution. The terms
634be6cbb808 Flip the switch: Bitten is now BSD-licensed.
cmlenz
parents: 153
diff changeset
9 # are also available at http://bitten.cmlenz.net/wiki/License.
0
0b2a3581c48d Import initial ''bitten'' source.
cmlenz
parents:
diff changeset
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
196009657e5e Simplify the recipe commands interface:
cmlenz
parents: 3
diff changeset
13 import sys
0
0b2a3581c48d Import initial ''bitten'' source.
cmlenz
parents:
diff changeset
14
61
47ab019508dd Moved {{{BuildError}}} class into package {{{bitten.build}}}.
cmlenz
parents: 60
diff changeset
15 from bitten.build import BuildError
4
196009657e5e Simplify the recipe commands interface:
cmlenz
parents: 3
diff changeset
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
196009657e5e Simplify the recipe commands interface:
cmlenz
parents: 3
diff changeset
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
196009657e5e Simplify the recipe commands interface:
cmlenz
parents: 3
diff changeset
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
3ab91c56d7bc * Fix `pythontools` unit tests on windows.
cmlenz
parents: 148
diff changeset
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
0b2a3581c48d Import initial ''bitten'' source.
cmlenz
parents:
diff changeset
68
0b2a3581c48d Import initial ''bitten'' source.
cmlenz
parents:
diff changeset
69 if __name__ == '__main__':
4
196009657e5e Simplify the recipe commands interface:
cmlenz
parents: 3
diff changeset
70 try:
103
f1baf05a49dd * Strip extra line separators from recipe command output on windows. Closes #25.
cmlenz
parents: 72
diff changeset
71 main()
4
196009657e5e Simplify the recipe commands interface:
cmlenz
parents: 3
diff changeset
72 except BuildError, e:
153
3ab91c56d7bc * Fix `pythontools` unit tests on windows.
cmlenz
parents: 148
diff changeset
73 print
8
45d7bfe64d00 Slightly improved implementation of the python tools.
cmlenz
parents: 5
diff changeset
74 print>>sys.stderr, 'FAILED: %s' % e
4
196009657e5e Simplify the recipe commands interface:
cmlenz
parents: 3
diff changeset
75 sys.exit(-1)
153
3ab91c56d7bc * Fix `pythontools` unit tests on windows.
cmlenz
parents: 148
diff changeset
76 print
8
45d7bfe64d00 Slightly improved implementation of the python tools.
cmlenz
parents: 5
diff changeset
77 print 'SUCCESS'
Copyright (C) 2012-2017 Edgewall Software