annotate bin/listpackages.py @ 310:26c15a0f0e52

When stopping because of an error, do not raise the exception again as it leads to confusing double tracebacks in the log. Instead, simply log the reason for the stopping and stop in the same way a stop instruction is handled.
author Bernhard Herzog <bh@intevation.de>
date Wed, 02 Dec 2009 14:46:37 +0000
parents 1fcdffbeb9de
children dd2bd0ccd674
rev   line source
287
1fcdffbeb9de Make the #! line in the commands more portable. Use /usr/bin/python
Bernhard Herzog <bh@intevation.de>
parents: 254
diff changeset
1 #! /usr/bin/python
246
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
2 # Copyright (C) 2007, 2008, 2009 by Intevation GmbH
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
3 # Authors:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
4 # Bernhard Herzog <bh@intevation.de>
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
5 #
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
6 # This program is free software under the GPL (>=v2)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
7 # Read the file COPYING coming with the software for details.
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
8
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
9 """List the absolute filenames of packages created by treepkg"""
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
10
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
11 import sys
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
12
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
13 import treepkgcmd
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
14 from treepkg.options import create_parser
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
15 from treepkg.report import get_packager_group
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
16
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
17 def parse_commandline():
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
18 parser = create_parser()
254
b1776fc8e24a Correct the help string for listpackages' --newest option and set a
Bernhard Herzog <bh@intevation.de>
parents: 253
diff changeset
19 parser.set_defaults(binary=False, source=False, newest=1)
246
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
20 parser.add_option("--revision",
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
21 help=("The revision whose files are to be listed."
246
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
22 " If not given, the latest revision is used."
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
23 " The value may be given as REV-RULESREV to specify"
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
24 " both the main source revision and the revision of"
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
25 " the packaging rules"))
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
26 parser.add_option("--track",
199
24d119c27150 listpackages command: if --track is omitted, list files of all tracks.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
27 help=("The package track whose files are to be listed."
24d119c27150 listpackages command: if --track is omitted, list files of all tracks.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
28 " If not given, files of all tracks are listed."))
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
29 parser.add_option("--source", action="store_true",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
30 help=("List source packages"))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
31 parser.add_option("--binary", action="store_true",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
32 help=("List binary packages"))
253
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
33 parser.add_option("--newest", type="int",
254
b1776fc8e24a Correct the help string for listpackages' --newest option and set a
Bernhard Herzog <bh@intevation.de>
parents: 253
diff changeset
34 help=("Number of newest revisions to list."
b1776fc8e24a Correct the help string for listpackages' --newest option and set a
Bernhard Herzog <bh@intevation.de>
parents: 253
diff changeset
35 " Defaults to 1."))
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
36 return parser.parse_args()
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
37
246
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
38 def parse_revision(raw_revision):
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
39 if raw_revision is None:
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
40 return None, None
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
41
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
42 split_revision = raw_revision.split("-")
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
43 if len(split_revision) > 2:
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
44 raise ValueError("Cannot parse revision %r; too many '-' signs"
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
45 % raw_revision)
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
46 revision = int(split_revision[0])
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
47 if len(split_revision) == 1:
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
48 rulesrev = None
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
49 else:
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
50 rulesrev = int(split_revision[1])
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
51
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
52 return revision, rulesrev
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
53
248
5dd710b167d2 Make bin/listpackages.py handle corner cases like no revisions built or
Bernhard Herzog <bh@intevation.de>
parents: 246
diff changeset
54 def format_revision(main_rev, rules_rev):
5dd710b167d2 Make bin/listpackages.py handle corner cases like no revisions built or
Bernhard Herzog <bh@intevation.de>
parents: 246
diff changeset
55 formatted = str(main_rev)
5dd710b167d2 Make bin/listpackages.py handle corner cases like no revisions built or
Bernhard Herzog <bh@intevation.de>
parents: 246
diff changeset
56 if rules_rev is not None:
5dd710b167d2 Make bin/listpackages.py handle corner cases like no revisions built or
Bernhard Herzog <bh@intevation.de>
parents: 246
diff changeset
57 formatted += "-" + str(rules_rev)
5dd710b167d2 Make bin/listpackages.py handle corner cases like no revisions built or
Bernhard Herzog <bh@intevation.de>
parents: 246
diff changeset
58 return formatted
5dd710b167d2 Make bin/listpackages.py handle corner cases like no revisions built or
Bernhard Herzog <bh@intevation.de>
parents: 246
diff changeset
59
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
60
253
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
61 def list_track_packages(track, revision, num_newest, source, binary):
246
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
62 main_rev, rules_rev = revision
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
63
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
64 revisions = track.get_revisions()
248
5dd710b167d2 Make bin/listpackages.py handle corner cases like no revisions built or
Bernhard Herzog <bh@intevation.de>
parents: 246
diff changeset
65 if not revisions and main_rev is None:
5dd710b167d2 Make bin/listpackages.py handle corner cases like no revisions built or
Bernhard Herzog <bh@intevation.de>
parents: 246
diff changeset
66 return
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
67
251
243f206574cb Make bin/listpackages.py prefer the newest packages by start-time, not
Bernhard Herzog <bh@intevation.de>
parents: 248
diff changeset
68 revisions = sorted(revisions, key=lambda r: r.status.start, reverse=True)
243f206574cb Make bin/listpackages.py prefer the newest packages by start-time, not
Bernhard Herzog <bh@intevation.de>
parents: 248
diff changeset
69
253
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
70 candidates = []
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
71
246
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
72 if main_rev is None:
253
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
73 candidates = [revpkg for revpkg in revisions
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
74 if revpkg.status.status.finished
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
75 and not revpkg.status.status.error]
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
76 candidates = candidates[:num_newest]
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
77 else:
251
243f206574cb Make bin/listpackages.py prefer the newest packages by start-time, not
Bernhard Herzog <bh@intevation.de>
parents: 248
diff changeset
78 for revpkg in revisions:
246
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
79 if revpkg.revision == main_rev:
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
80 if rules_rev is None or revpkg.rules_revision == rules_rev:
253
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
81 candidates = [revpkg]
246
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
82 break
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
83 else:
253
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
84 print >>sys.stderr, "No revision", format_revision(main_rev,
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
85 rules_rev)
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
86 sys.exit(1)
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
87
253
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
88 for revpkg in candidates:
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
89 if source:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
90 for filename in revpkg.list_source_files():
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
91 print filename
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
92 if binary:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
93 for filename in revpkg.list_binary_files():
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
94 print filename
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
95
253
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
96 def list_packages(config_file, trackname, revision, num_newest, source, binary):
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
97 group = get_packager_group(config_file)
199
24d119c27150 listpackages command: if --track is omitted, list files of all tracks.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
98 tracks = group.get_package_tracks()
24d119c27150 listpackages command: if --track is omitted, list files of all tracks.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
99 if trackname is not None:
24d119c27150 listpackages command: if --track is omitted, list files of all tracks.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
100 tracks = [track for track in tracks if track.name == trackname]
24d119c27150 listpackages command: if --track is omitted, list files of all tracks.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
101 if not tracks:
24d119c27150 listpackages command: if --track is omitted, list files of all tracks.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
102 print >>sys.stderr, "no track named", trackname
24d119c27150 listpackages command: if --track is omitted, list files of all tracks.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
103 sys.exit(1)
24d119c27150 listpackages command: if --track is omitted, list files of all tracks.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
104 for track in tracks:
253
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
105 list_track_packages(track, revision, num_newest, source, binary)
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
106
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
107 def main():
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
108 options, args = parse_commandline()
246
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
109 options.revision = parse_revision(options.revision)
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
110 list_packages(options.config_file, options.track, options.revision,
253
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
111 num_newest=options.newest,
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
112 source=options.source, binary=options.binary)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
113
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
114 main()
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)