Mercurial > treepkg
annotate bin/runtreepkg.py @ 307:5f442b0cf3a4
New command line argument --stop-on-error for runtreepkg.py and
corresponding parameter for PackagerGroup. If given, treepkg stops
immediately when a build-attempt fails.
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Tue, 01 Dec 2009 11:47:52 +0000 |
parents | 97c17fb0ca19 |
children | de78084fcbce |
rev | line source |
---|---|
287
1fcdffbeb9de
Make the #! line in the commands more portable. Use /usr/bin/python
Bernhard Herzog <bh@intevation.de>
parents:
191
diff
changeset
|
1 #! /usr/bin/python |
1fcdffbeb9de
Make the #! line in the commands more portable. Use /usr/bin/python
Bernhard Herzog <bh@intevation.de>
parents:
191
diff
changeset
|
2 # Copyright (C) 2007, 2008, 2009 by Intevation GmbH |
78
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
3 # Authors: |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
4 # Bernhard Herzog <bh@intevation.de> |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
5 # |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
6 # This program is free software under the GPL (>=v2) |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
7 # Read the file COPYING coming with the software for details. |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
8 |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
9 """Starts the tree packager""" |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
10 |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
11 import sys |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
12 import os |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
13 import logging |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
14 from optparse import OptionParser |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
15 |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
16 import treepkgcmd |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
17 from treepkg.options import create_parser |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
18 from treepkg.packager import create_package_track, PackagerGroup |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
19 from treepkg.readconfig import read_config |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
20 |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
21 def initialize_logging(): |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
22 """Initializes the logging system""" |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
23 root = logging.getLogger() |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
24 root.setLevel(logging.DEBUG) |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
25 hdlr = logging.StreamHandler() |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
26 fmt = logging.Formatter("%(asctime)s %(levelname)s %(message)s") |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
27 hdlr.setFormatter(fmt) |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
28 root.addHandler(hdlr) |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
29 |
290
97c17fb0ca19
Add --track-option command line option to set track-specific options.
Bernhard Herzog <bh@intevation.de>
parents:
287
diff
changeset
|
30 def handle_track_option(option, opt_str, value, parser): |
97c17fb0ca19
Add --track-option command line option to set track-specific options.
Bernhard Herzog <bh@intevation.de>
parents:
287
diff
changeset
|
31 parsed_options = parser.values.track_options |
97c17fb0ca19
Add --track-option command line option to set track-specific options.
Bernhard Herzog <bh@intevation.de>
parents:
287
diff
changeset
|
32 track_optname, value = value.split("=", 1) |
97c17fb0ca19
Add --track-option command line option to set track-specific options.
Bernhard Herzog <bh@intevation.de>
parents:
287
diff
changeset
|
33 trackname, optname = track_optname.split(".") |
97c17fb0ca19
Add --track-option command line option to set track-specific options.
Bernhard Herzog <bh@intevation.de>
parents:
287
diff
changeset
|
34 track_options = parsed_options.setdefault(trackname, dict()) |
97c17fb0ca19
Add --track-option command line option to set track-specific options.
Bernhard Herzog <bh@intevation.de>
parents:
287
diff
changeset
|
35 track_options[optname] = value |
97c17fb0ca19
Add --track-option command line option to set track-specific options.
Bernhard Herzog <bh@intevation.de>
parents:
287
diff
changeset
|
36 |
78
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
37 def parse_commandline(): |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
38 parser = create_parser() |
290
97c17fb0ca19
Add --track-option command line option to set track-specific options.
Bernhard Herzog <bh@intevation.de>
parents:
287
diff
changeset
|
39 parser.set_defaults(track_options=dict()) |
78
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
40 parser.add_option("--once", action="store_true", |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
41 help=("Check the packagers only once and exit afterwards." |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
42 " Without this option, the tree packager will" |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
43 " check periodically.")) |
307
5f442b0cf3a4
New command line argument --stop-on-error for runtreepkg.py and
Bernhard Herzog <bh@intevation.de>
parents:
290
diff
changeset
|
44 parser.add_option("--stop-on-error", action="store_true", |
5f442b0cf3a4
New command line argument --stop-on-error for runtreepkg.py and
Bernhard Herzog <bh@intevation.de>
parents:
290
diff
changeset
|
45 help=("Stop the tree packager when a packaging" |
5f442b0cf3a4
New command line argument --stop-on-error for runtreepkg.py and
Bernhard Herzog <bh@intevation.de>
parents:
290
diff
changeset
|
46 " attempt fails.")) |
81
2630a1c18816
Add command line option --revision to package a specific revision.
Bernhard Herzog <bh@intevation.de>
parents:
78
diff
changeset
|
47 parser.add_option("--revision", |
2630a1c18816
Add command line option --revision to package a specific revision.
Bernhard Herzog <bh@intevation.de>
parents:
78
diff
changeset
|
48 help=("SVN revision to update to before attempting" |
2630a1c18816
Add command line option --revision to package a specific revision.
Bernhard Herzog <bh@intevation.de>
parents:
78
diff
changeset
|
49 " to package.")) |
190
e83db4482aab
Add runtreepkg.py command line option --no-svn-update to inhibit updates
Bernhard Herzog <bh@intevation.de>
parents:
81
diff
changeset
|
50 parser.add_option("--no-svn-update", action="store_true", |
e83db4482aab
Add runtreepkg.py command line option --no-svn-update to inhibit updates
Bernhard Herzog <bh@intevation.de>
parents:
81
diff
changeset
|
51 help=("Do not update the SVN workingcopy before" |
e83db4482aab
Add runtreepkg.py command line option --no-svn-update to inhibit updates
Bernhard Herzog <bh@intevation.de>
parents:
81
diff
changeset
|
52 " attempting to package.")) |
290
97c17fb0ca19
Add --track-option command line option to set track-specific options.
Bernhard Herzog <bh@intevation.de>
parents:
287
diff
changeset
|
53 parser.add_option("--track-option", action="callback", type="string", |
97c17fb0ca19
Add --track-option command line option to set track-specific options.
Bernhard Herzog <bh@intevation.de>
parents:
287
diff
changeset
|
54 callback=handle_track_option, |
97c17fb0ca19
Add --track-option command line option to set track-specific options.
Bernhard Herzog <bh@intevation.de>
parents:
287
diff
changeset
|
55 help=("Sets a track-specific option." |
97c17fb0ca19
Add --track-option command line option to set track-specific options.
Bernhard Herzog <bh@intevation.de>
parents:
287
diff
changeset
|
56 " The argument should be of the form" |
97c17fb0ca19
Add --track-option command line option to set track-specific options.
Bernhard Herzog <bh@intevation.de>
parents:
287
diff
changeset
|
57 " TRACKNAME.OPTION=VALUE")) |
78
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
58 return parser.parse_args() |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
59 |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
60 def main(): |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
61 options, args = parse_commandline() |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
62 |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
63 initialize_logging() |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
64 |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
65 treepkg_opts, packager_opts = read_config(options.config_file) |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
66 |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
67 if args: |
191
94fb3f3ab58b
When building a subset of tracks, make sure new packages are added to
Bernhard Herzog <bh@intevation.de>
parents:
190
diff
changeset
|
68 selected_tracks = set(args) |
94fb3f3ab58b
When building a subset of tracks, make sure new packages are added to
Bernhard Herzog <bh@intevation.de>
parents:
190
diff
changeset
|
69 else: |
94fb3f3ab58b
When building a subset of tracks, make sure new packages are added to
Bernhard Herzog <bh@intevation.de>
parents:
190
diff
changeset
|
70 selected_tracks = set(opts["name"] for opts in packager_opts) |
94fb3f3ab58b
When building a subset of tracks, make sure new packages are added to
Bernhard Herzog <bh@intevation.de>
parents:
190
diff
changeset
|
71 |
94fb3f3ab58b
When building a subset of tracks, make sure new packages are added to
Bernhard Herzog <bh@intevation.de>
parents:
190
diff
changeset
|
72 for opts in packager_opts: |
94fb3f3ab58b
When building a subset of tracks, make sure new packages are added to
Bernhard Herzog <bh@intevation.de>
parents:
190
diff
changeset
|
73 name = opts["name"] |
94fb3f3ab58b
When building a subset of tracks, make sure new packages are added to
Bernhard Herzog <bh@intevation.de>
parents:
190
diff
changeset
|
74 opts["do_build"] = name in selected_tracks |
94fb3f3ab58b
When building a subset of tracks, make sure new packages are added to
Bernhard Herzog <bh@intevation.de>
parents:
190
diff
changeset
|
75 selected_tracks.discard(name) |
290
97c17fb0ca19
Add --track-option command line option to set track-specific options.
Bernhard Herzog <bh@intevation.de>
parents:
287
diff
changeset
|
76 if name in options.track_options: |
97c17fb0ca19
Add --track-option command line option to set track-specific options.
Bernhard Herzog <bh@intevation.de>
parents:
287
diff
changeset
|
77 opts.update(options.track_options[name]) |
191
94fb3f3ab58b
When building a subset of tracks, make sure new packages are added to
Bernhard Herzog <bh@intevation.de>
parents:
190
diff
changeset
|
78 for name in selected_tracks: |
94fb3f3ab58b
When building a subset of tracks, make sure new packages are added to
Bernhard Herzog <bh@intevation.de>
parents:
190
diff
changeset
|
79 print >>sys.stderr, "No package track found named %r" % name |
78
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
80 |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
81 if packager_opts: |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
82 group = PackagerGroup([create_package_track(**opts) |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
83 for opts in packager_opts], |
81
2630a1c18816
Add command line option --revision to package a specific revision.
Bernhard Herzog <bh@intevation.de>
parents:
78
diff
changeset
|
84 revision=options.revision, |
190
e83db4482aab
Add runtreepkg.py command line option --no-svn-update to inhibit updates
Bernhard Herzog <bh@intevation.de>
parents:
81
diff
changeset
|
85 do_svn_update=not options.no_svn_update, |
307
5f442b0cf3a4
New command line argument --stop-on-error for runtreepkg.py and
Bernhard Herzog <bh@intevation.de>
parents:
290
diff
changeset
|
86 stop_on_error=options.stop_on_error, |
78
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
87 **treepkg_opts) |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
88 if options.once: |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
89 group.check_package_tracks() |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
90 else: |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
91 group.run() |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
92 |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
93 main() |