Mercurial > treepkg
view bin/listpackages.py @ 246:59e2d8e26635
Extend --revision parameter of bin/listpackages.py to accept rules revision too.
Add test cases for listpackages.
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Fri, 06 Mar 2009 19:21:56 +0000 |
parents | 24d119c27150 |
children | 5dd710b167d2 |
line wrap: on
line source
#! /usr/bin/python2.4 # Copyright (C) 2007, 2008, 2009 by Intevation GmbH # Authors: # Bernhard Herzog <bh@intevation.de> # # This program is free software under the GPL (>=v2) # Read the file COPYING coming with the software for details. """List the absolute filenames of packages created by treepkg""" import sys import treepkgcmd from treepkg.options import create_parser from treepkg.report import get_packager_group def parse_commandline(): parser = create_parser() parser.set_defaults(binary=False, source=False) parser.add_option("--revision", help=("The revision whose files are to be listed." " If not given, the latest revision is used." " The value may be given as REV-RULESREV to specify" " both the main source revision and the revision of" " the packaging rules")) parser.add_option("--track", help=("The package track whose files are to be listed." " If not given, files of all tracks are listed.")) parser.add_option("--source", action="store_true", help=("List source packages")) parser.add_option("--binary", action="store_true", help=("List binary packages")) return parser.parse_args() def parse_revision(raw_revision): if raw_revision is None: return None, None split_revision = raw_revision.split("-") if len(split_revision) > 2: raise ValueError("Cannot parse revision %r; too many '-' signs" % raw_revision) revision = int(split_revision[0]) if len(split_revision) == 1: rulesrev = None else: rulesrev = int(split_revision[1]) return revision, rulesrev def list_track_packages(track, revision, source, binary): main_rev, rules_rev = revision revisions = track.get_revisions() if not revisions: print >>sys.stderr, "No revisions have been packaged" sys.exit(1) if main_rev is None: revpkg = revisions[-1] else: # iterate in reverse, so that we pick up the newest revision # packager with the desired revision first if rules_rev is None for revpkg in revisions[::-1]: if revpkg.revision == main_rev: if rules_rev is None or revpkg.rules_revision == rules_rev: break else: revpkg = None if revpkg is not None: if source: for filename in revpkg.list_source_files(): print filename if binary: for filename in revpkg.list_binary_files(): print filename else: print >>sys.stderr, "No revision", repr(revision) sys.exit(1) def list_packages(config_file, trackname, revision, source, binary): group = get_packager_group(config_file) tracks = group.get_package_tracks() if trackname is not None: tracks = [track for track in tracks if track.name == trackname] if not tracks: print >>sys.stderr, "no track named", trackname sys.exit(1) for track in tracks: list_track_packages(track, revision, source, binary) def main(): options, args = parse_commandline() options.revision = parse_revision(options.revision) list_packages(options.config_file, options.track, options.revision, source=options.source, binary=options.binary) main()