+################################################################################
+
+def write_filelists(packages, dislocated_files):
+ # Build up the index to iterate over
+ d = {};
+ for unique_id in packages.keys():
+ suite = packages[unique_id]["suite"];
+ component = packages[unique_id]["component"];
+ arch = packages[unique_id]["arch"];
+ type = packages[unique_id]["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 = utils.split_args(Options["Suite"]);
+ for suite in map(string.lower, suites):
+ d.setdefault(suite, {});
+ if not Options["Component"]:
+ components = Cnf.ValueList("Suite::%s::Components" % (suite));
+ else:
+ components = utils.split_args(Options["Component"]);
+ udeb_components = Cnf.ValueList("Suite::%s::UdebComponents" % (suite));
+ udeb_components = udeb_components;
+ for component in components:
+ d[suite].setdefault(component, {});
+ if component in udeb_components:
+ binary_types = [ "deb", "udeb" ];
+ else:
+ binary_types = [ "deb" ];
+ if not Options["Architecture"]:
+ architectures = Cnf.ValueList("Suite::%s::Architectures" % (suite));
+ else:
+ architectures = utils.split_args(Options["Architectures"]);
+ for arch in map(string.lower, architectures):
+ d[suite][component].setdefault(arch, {});
+ if arch == "source":
+ types = [ "dsc" ];
+ else:
+ types = binary_types;
+ for type in types:
+ d[suite][component][arch].setdefault(type, []);
+ # Then walk it
+ for suite in d.keys():
+ if Cnf.has_key("Suite::%s::Components" % (suite)):
+ for component in d[suite].keys():
+ for arch in d[suite][component].keys():
+ if arch == "all":
+ continue;
+ 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":
+ 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
+ list = [];
+ for component in d[suite].keys():
+ for arch in d[suite][component].keys():
+ for type in d[suite][component][arch].keys():
+ list.extend(d[suite][component][arch][type]);
+ write_legacy_mixed_filelist(suite, list, packages, dislocated_files);
+
+################################################################################
+
+# Want to use stable dislocation support: True or false?
+def stable_dislocation_p():
+ # If the support is not explicitly enabled, assume it's disabled
+ if not Cnf.FindB("Dinstall::StableDislocationSupport"):
+ return 0;
+ # If we don't have a stable suite, obviously a no-op
+ if not Cnf.has_key("Suite::Stable"):
+ return 0;
+ # If the suite(s) weren't explicitly listed, all suites are done
+ if not Options["Suite"]:
+ return 1;
+ # Otherwise, look in what suites the user specified
+ 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);