Mercurial > treepkg
view bin/listpackages.py @ 557:9824e409388b
Refactor git branching
If a checkout is already available and the branch is changed in
the config git command would always fail because it doesn't know
the branch to track. Therefore always check if the branch is
locally available and if not checkout the remote branch
author | Bjoern Ricks <bricks@intevation.de> |
---|---|
date | Fri, 02 Sep 2011 08:45:28 +0000 |
parents | dd2bd0ccd674 |
children |
line wrap: on
line source
#! /usr/bin/python # 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, newest=1) 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")) parser.add_option("--newest", type="int", help=("Number of newest revisions to list." " Defaults to 1.")) 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 = split_revision[0] if len(split_revision) == 1: rulesrev = None else: rulesrev = split_revision[1] return revision, rulesrev def format_revision(main_rev, rules_rev): formatted = str(main_rev) if rules_rev is not None: formatted += "-" + str(rules_rev) return formatted def list_track_packages(track, revision, num_newest, source, binary): main_rev, rules_rev = revision revisions = track.get_revisions() if not revisions and main_rev is None: return revisions = sorted(revisions, key=lambda r: r.status.start, reverse=True) candidates = [] if main_rev is None: candidates = [revpkg for revpkg in revisions if revpkg.status.status.finished and not revpkg.status.status.error] candidates = candidates[:num_newest] else: for revpkg in revisions: if revpkg.revision == main_rev: if rules_rev is None or revpkg.rules_revision == rules_rev: candidates = [revpkg] break else: print >>sys.stderr, "No revision", format_revision(main_rev, rules_rev) sys.exit(1) for revpkg in candidates: if source: for filename in revpkg.list_source_files(): print filename if binary: for filename in revpkg.list_binary_files(): print filename def list_packages(config_file, trackname, revision, num_newest, 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, num_newest, source, binary) def main(): options, args = parse_commandline() options.revision = parse_revision(options.revision) list_packages(options.config_file, options.track, options.revision, num_newest=options.newest, source=options.source, binary=options.binary) main()