Mercurial > treepkg
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() |