annotate bin/listpackages.py @ 253:7d932fac1055

Add --newest=N option to listpackages to get more than one newest revision. Add corresponding tests.
author Bernhard Herzog <bh@intevation.de>
date Tue, 14 Apr 2009 12:45:12 +0000
parents 2e0b373414b8
children b1776fc8e24a
rev   line source
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
1 #! /usr/bin/python2.4
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()
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
19 parser.set_defaults(binary=False, source=False)
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",
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
34 help=("List binary packages"))
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
35 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
36
246
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
37 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
38 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
39 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
40
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
41 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
42 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
43 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
44 % raw_revision)
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
45 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
46 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
47 rulesrev = None
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
48 else:
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
49 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
50
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
51 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
52
248
5dd710b167d2 Make bin/listpackages.py handle corner cases like no revisions built or
Bernhard Herzog <bh@intevation.de>
parents: 246
diff changeset
53 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
54 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
55 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
56 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
57 return formatted
5dd710b167d2 Make bin/listpackages.py handle corner cases like no revisions built or
Bernhard Herzog <bh@intevation.de>
parents: 246
diff changeset
58
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
59
253
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
60 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
61 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
62
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
63 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
64 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
65 return
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
66
251
243f206574cb Make bin/listpackages.py prefer the newest packages by start-time, not
Bernhard Herzog <bh@intevation.de>
parents: 248
diff changeset
67 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
68
253
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
69 candidates = []
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
70
246
59e2d8e26635 Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Bernhard Herzog <bh@intevation.de>
parents: 199
diff changeset
71 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
72 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
73 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
74 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
75 if num_newest is None:
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
76 num_newest = 1
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
77 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
78 else:
251
243f206574cb Make bin/listpackages.py prefer the newest packages by start-time, not
Bernhard Herzog <bh@intevation.de>
parents: 248
diff changeset
79 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
80 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
81 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
82 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
83 break
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
84 else:
253
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
85 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
86 rules_rev)
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
87 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
88
253
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
89 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
90 if source:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
91 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
92 print filename
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
93 if binary:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
94 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
95 print filename
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
96
253
7d932fac1055 Add --newest=N option to listpackages to get more than one newest
Bernhard Herzog <bh@intevation.de>
parents: 252
diff changeset
97 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
98 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
99 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
100 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
101 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
102 if not tracks:
24d119c27150 listpackages command: if --track is omitted, list files of all tracks.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
103 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
104 sys.exit(1)
24d119c27150 listpackages command: if --track is omitted, list files of all tracks.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
105 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
106 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
107
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
108 def main():
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
109 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
110 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
111 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
112 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
113 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
114
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
115 main()
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)