X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=jenna;h=50bed8fe12fda9883cdfc1e98ff09dac0535a258;hb=6cc79b7b093af0c68c9d80c61d5aa7cfe72c9188;hp=e1666b9c7f992ab7f52f8bca249b58dbe03adb15;hpb=cd4af5e0861a437353d10058c3cb099e3befb369;p=dak.git diff --git a/jenna b/jenna index e1666b9c..50bed8fe 100755 --- a/jenna +++ b/jenna @@ -1,8 +1,8 @@ #!/usr/bin/env python # Generate file lists used by apt-ftparchive to generate Packages and Sources files -# Copyright (C) 2000, 2001, 2002 James Troup -# $Id: jenna,v 1.19 2002-06-05 16:53:05 troup Exp $ +# Copyright (C) 2000, 2001, 2002, 2003 James Troup +# $Id: jenna,v 1.25 2003-05-02 13:53:57 troup Exp $ # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -61,69 +61,12 @@ Write out file lists suitable for use with apt-ftparchive. -n, --no-delete don't delete older versions -s, --suite=SUITE only write file lists for this suite -ARCH, COMPONENT and SUITE can be space seperated lists, e.g. +ARCH, COMPONENT and SUITE can be space separated lists, e.g. --architecture=\"m68k i386\""""; sys.exit(exit_code); ################################################################################ -# Handle -a, -c and -s arguments; returns them as SQL constraints -def parse_args(): - if Options["Suite"]: - suite_ids_list = []; - for suite in string.split(Options["Suite"]): - suite_id = db_access.get_suite_id(suite); - if suite_id == -1: - utils.warn("suite '%s' not recognised." % (suite)); - else: - suite_ids_list.append(suite_id); - if suite_ids_list: - con_suites = "AND su.id IN (%s)" % string.join(map(str, suite_ids_list), ", "); - else: - utils.fubar("No valid suite given."); - else: - con_suites = ""; - - if Options["Architecture"]: - arch_ids_list = []; - check_source = 0; - for architecture in string.split(Options["Architecture"]): - if architecture == "source": - check_source = 1; - else: - architecture_id = db_access.get_architecture_id(architecture); - if architecture_id == -1: - utils.warn("architecture '%s' not recognised." % (architecture)); - else: - arch_ids_list.append(architecture_id); - if arch_ids_list: - con_architectures = "AND a.id IN (%s)" % string.join(map(str, arch_ids_list), ", "); - else: - if not check_source: - utils.fubar("No valid architecture given."); - else: - con_architectures = ""; - check_source = 1; - - if Options["Component"]: - component_ids_list = []; - for component in string.split(Options["Component"]): - component_id = db_access.get_component_id(component); - if component_id == -1: - utils.warn("component '%s' not recognised." % (component)); - else: - component_ids_list.append(component_id); - if component_ids_list: - con_components = "AND su.id IN (%s)" % string.join(map(str, component_ids_list), ", "); - else: - utils.fubar("No valid component given."); - else: - con_components = ""; - - return (con_suites, con_architectures, con_components, check_source); - -################################################################################ - def version_cmp(a, b): return -apt_pkg.VersionCompare(a[0], b[0]); @@ -162,7 +105,7 @@ def resolve_arch_all_vs_any(versions, packages): unique_id = i[1]; arch = packages[unique_id]["arch"]; if arch == "all": - arch_all_versions = i; + arch_all_versions = [i]; arch_all_version = i[0]; arch_any_versions.remove(i); # Sort arch: any versions into descending order @@ -205,7 +148,7 @@ def remove_duplicate_versions(versions, packages): # Remove all but the highest delete_packages(dominated_versions, pkg, arch, suite, dominant_version, delete_table, delete_col, packages); - return dominant_versions; + return [dominant_versions]; ################################################################################ @@ -242,14 +185,14 @@ def cleanup(packages): # Check to see if we have arch: all and arch: !all (ignoring source) num_arches = len(arches.keys()); if arches.has_key("source"): - num_arches = num_arches - 1; + num_arches -= 1; # If we do, remove the duplicates if num_arches > 1: versions = []; for arch in arches.keys(): if arch != "source": versions.extend(d[suite][pkg][arch]); - remove_duplicate_versions(versions, packages); + resolve_arch_all_vs_any(versions, packages); ################################################################################ @@ -338,14 +281,14 @@ def write_filelists(packages, dislocated_files): if not Options["Suite"]: suites = Cnf.SubTree("Suite").List(); else: - suites = string.split(Options["Suite"]); + suites = Options["Suite"].split(); for suite in map(string.lower, suites): if not d.has_key(suite): d[suite] = {}; if not Options["Component"]: components = Cnf.ValueList("Suite::%s::Components" % (suite)); else: - components = string.split(Options["Components"]); + components = Options["Components"].split(); udeb_components = Cnf.ValueList("Suite::%s::UdebComponents" % (suite)); udeb_components = udeb_components; for component in components: @@ -358,7 +301,7 @@ def write_filelists(packages, dislocated_files): if not Options["Architecture"]: architectures = Cnf.ValueList("Suite::%s::Architectures" % (suite)); else: - architectures = string.split(Options["Architectures"]); + architectures = Options["Architectures"].split(); for arch in map(string.lower, architectures): if not d[suite][component].has_key(arch): d[suite][component][arch] = {}; @@ -406,13 +349,14 @@ def stable_dislocation_p(): if not Options["Suite"]: return 1; # Otherwise, look in what suites the user specified - suites = string.split(Options["Suite"]); + suites = Options["Suite"].split(); return suites.count("stable"); ################################################################################ def do_da_do_da(): - (con_suites, con_architectures, con_components, check_source) = parse_args(); + (con_suites, con_architectures, con_components, check_source) = \ + utils.parse_args(Options); if stable_dislocation_p(): dislocated_files = claire.find_dislocated_stable(Cnf, projectB); @@ -428,7 +372,7 @@ SELECT b.id, b.package, a.arch_string, b.version, l.path, f.filename, c.name, AND f.location = l.id AND l.component = c.id AND ba.suite = su.id %s %s %s""" % (con_suites, con_architectures, con_components); if check_source: - query = query + """ + query += """ UNION SELECT s.id, s.source, 'source', s.version, l.path, f.filename, c.name, f.id, su.suite_name, 'dsc' @@ -443,7 +387,7 @@ SELECT s.id, s.source, 'source', s.version, l.path, f.filename, c.name, f.id, for i in ql: (id, pkg, arch, version, path, filename, component, file_id, suite, type) = i; # 'id' comes from either 'binaries' or 'source', so it's not unique - unique_id = unique_id + 1; + unique_id += 1; packages[unique_id] = Dict(id=id, pkg=pkg, arch=arch, version=version, path=path, filename=filename, component=component, file_id=file_id, @@ -473,7 +417,7 @@ def main(): projectB = pg.connect(Cnf["DB::Name"], Cnf["DB::Host"], int(Cnf["DB::Port"])); db_access.init(Cnf, projectB); Logger = logging.Logger(Cnf, "jenna"); - do_da_do_da(); + utils.try_with_debug(do_da_do_da); Logger.close(); #########################################################################################