X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=jenna;h=99de03b29e1771e0a2a580b6260e8606b53941d9;hb=de3991e803cc6f69d5eee0fbf75daf95b0f9969d;hp=50bed8fe12fda9883cdfc1e98ff09dac0535a258;hpb=4cb4df2ea33374acb5f6f04eaddea06977dfb620;p=dak.git diff --git a/jenna b/jenna index 50bed8fe..99de03b2 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, 2003 James Troup -# $Id: jenna,v 1.25 2003-05-02 13:53:57 troup Exp $ +# Copyright (C) 2000, 2001, 2002, 2003, 2004 James Troup +# $Id: jenna,v 1.29 2004-11-27 17:58:47 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 @@ -117,7 +117,7 @@ def resolve_arch_all_vs_any(versions, packages): delete_table = "bin_associations"; delete_col = "bin"; - if apt_pkg.VersionCompare(highest_arch_any_version, arch_all_version) != 1: + if apt_pkg.VersionCompare(highest_arch_any_version, arch_all_version) < 1: # arch: all dominates delete_packages(arch_any_versions, pkg, "all", suite, arch_all_version, delete_table, delete_col, packages); @@ -160,12 +160,9 @@ def cleanup(packages): pkg = packages[unique_id]["pkg"]; arch = packages[unique_id]["arch"]; version = packages[unique_id]["version"]; - if not d.has_key(suite): - d[suite] = {}; - if not d[suite].has_key(pkg): - d[suite][pkg] = {}; - if not d[suite][pkg].has_key(arch): - d[suite][pkg][arch] = []; + d.setdefault(suite, {}); + d[suite].setdefault(pkg, {}); + d[suite][pkg].setdefault(arch, []); d[suite][pkg][arch].append([version, unique_id]); # Clean up old versions for suite in d.keys(): @@ -266,34 +263,26 @@ def write_filelists(packages, dislocated_files): component = packages[unique_id]["component"]; arch = packages[unique_id]["arch"]; type = packages[unique_id]["type"]; - if not d.has_key(suite): - d[suite] = {}; - if not d[suite].has_key(component): - d[suite][component] = {}; - if not d[suite][component].has_key(arch): - d[suite][component][arch] = {}; - if not d[suite][component].has_key(arch): - d[suite][component][arch] = {}; - if not d[suite][component][arch].has_key(type): - d[suite][component][arch][type] = []; + d.setdefault(suite, {}); + d[suite].setdefault(component, {}); + d[suite][component].setdefault(arch, {}); + d[suite][component][arch].setdefault(type, []); d[suite][component][arch][type].append(unique_id); # Flesh out the index if not Options["Suite"]: suites = Cnf.SubTree("Suite").List(); else: - suites = Options["Suite"].split(); + suites = utils.split_args(Options["Suite"]); for suite in map(string.lower, suites): - if not d.has_key(suite): - d[suite] = {}; + d.setdefault(suite, {}); if not Options["Component"]: components = Cnf.ValueList("Suite::%s::Components" % (suite)); else: - components = Options["Components"].split(); + components = utils.split_args(Options["Component"]); udeb_components = Cnf.ValueList("Suite::%s::UdebComponents" % (suite)); udeb_components = udeb_components; for component in components: - if not d[suite].has_key(component): - d[suite][component] = {}; + d[suite].setdefault(component, {}); if component in udeb_components: binary_types = [ "deb", "udeb" ]; else: @@ -301,17 +290,15 @@ def write_filelists(packages, dislocated_files): if not Options["Architecture"]: architectures = Cnf.ValueList("Suite::%s::Architectures" % (suite)); else: - architectures = Options["Architectures"].split(); + architectures = utils.split_args(Options["Architectures"]); for arch in map(string.lower, architectures): - if not d[suite][component].has_key(arch): - d[suite][component][arch] = {}; + d[suite][component].setdefault(arch, {}); if arch == "source": types = [ "dsc" ]; else: types = binary_types; for type in types: - if not d[suite][component][arch].has_key(type): - d[suite][component][arch][type] = []; + d[suite][component][arch].setdefault(type, []); # Then walk it for suite in d.keys(): if Cnf.has_key("Suite::%s::Components" % (suite)): @@ -322,9 +309,13 @@ def write_filelists(packages, dislocated_files): for type in d[suite][component][arch].keys(): list = d[suite][component][arch][type]; # If it's a binary, we need to add in the arch: all debs too - if arch != "source" and d[suite][component].has_key("all") \ - and d[suite][component]["all"].has_key(type): - list.extend(d[suite][component]["all"][type]); + if arch != "source": + archall_suite = Cnf.get("Jenna::ArchAllMap::%s" % (suite)); + if archall_suite: + list.extend(d[archall_suite][component]["all"][type]); + elif d[suite][component].has_key("all") and \ + d[suite][component]["all"].has_key(type): + list.extend(d[suite][component]["all"][type]); write_filelist(suite, component, arch, type, list, packages, dislocated_files); else: # legacy-mixed suite @@ -349,12 +340,27 @@ def stable_dislocation_p(): if not Options["Suite"]: return 1; # Otherwise, look in what suites the user specified - suites = Options["Suite"].split(); - return suites.count("stable"); + suites = utils.split_args(Options["Suite"]); + + if "stable" in suites: + return 1; + else: + return 0; ################################################################################ def do_da_do_da(): + # If we're only doing a subset of suites, ensure we do enough to + # be able to do arch: all mapping. + if Options["Suite"]: + suites = utils.split_args(Options["Suite"]); + for suite in suites: + archall_suite = Cnf.get("Jenna::ArchAllMap::%s" % (suite)); + if archall_suite and archall_suite not in suites: + utils.warn("Adding %s as %s maps Arch: all from it." % (archall_suite, suite)); + suites.append(archall_suite); + Options["Suite"] = ",".join(suites); + (con_suites, con_architectures, con_components, check_source) = \ utils.parse_args(Options); @@ -417,7 +423,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"); - utils.try_with_debug(do_da_do_da); + do_da_do_da(); Logger.close(); #########################################################################################