+ 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);
+
+ (con_suites, con_architectures, con_components, check_source) = \
+ utils.parse_args(Options);
+
+ if stable_dislocation_p():
+ dislocated_files = claire.find_dislocated_stable(Cnf, projectB);
+ else:
+ dislocated_files = {};
+
+ query = """
+SELECT b.id, b.package, a.arch_string, b.version, l.path, f.filename, c.name,
+ f.id, su.suite_name, b.type
+ FROM binaries b, bin_associations ba, architecture a, files f, location l,
+ component c, suite su
+ WHERE b.id = ba.bin AND b.file = f.id AND b.architecture = a.id
+ 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 += """
+UNION
+SELECT s.id, s.source, 'source', s.version, l.path, f.filename, c.name, f.id,
+ su.suite_name, 'dsc'
+ FROM source s, src_associations sa, files f, location l, component c, suite su
+ WHERE s.id = sa.source AND s.file = f.id AND f.location = l.id
+ AND l.component = c.id AND sa.suite = su.id %s %s""" % (con_suites, con_components);
+ q = projectB.query(query);
+ ql = q.getresult();
+ # Build up the main index of packages
+ packages = {};
+ unique_id = 0;
+ 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 += 1;
+ packages[unique_id] = Dict(id=id, pkg=pkg, arch=arch, version=version,
+ path=path, filename=filename,
+ component=component, file_id=file_id,
+ suite=suite, type = type);
+ cleanup(packages);
+ write_filelists(packages, dislocated_files);
+
+################################################################################