+ architecture = Sources.Section.Find('Architecture');
+ binaries = Sources.Section.Find('Binary');
+
+ # Check for packages built on architectures they shouldn't be.
+ if architecture != "any" and architecture != "all":
+ architectures = {};
+ for arch in string.split(architecture):
+ architectures[string.strip(arch)] = "";
+ for binary in string.split(binaries, ','):
+ binary = string.strip(binary);
+ q = projectB.query("SELECT a.arch_string, b.version FROM binaries b, bin_associations ba, architecture a WHERE ba.suite = %s AND ba.bin = b.id AND b.architecture = a.id AND b.package = '%s'" % (suite_id, binary));
+ ql = q.getresult();
+ if not ql:
+ utils.warn("%s lists %s as a binary, but it doesn't seem to exist in %s?" % (source, binary, suite));
+ # Loop around twice; first to get the latest 'valid' version
+ versions = [];
+ for i in q.getresult():
+ arch = i[0];
+ version = i[1];
+ if architectures.has_key(arch):
+ versions.append(version);
+ versions.sort(apt_pkg.VersionCompare);
+ if versions != []:
+ latest_version = versions.pop()
+ else:
+ latest_version = None;
+ # ... then to check for 'invalid' architectures
+ for i in q.getresult():
+ arch = i[0];
+ version = i[1];
+ if not architectures.has_key(arch):
+ print "[%s]: %s appears for %s (vs. '%s')" % (source, binary, arch, architecture),
+ if not latest_version:
+ print "** mwaap, mwapp! Ignore me **";
+ continue;
+ if apt_pkg.VersionCompare(latest_version, version) != -1:
+ print "- out of date.",
+ else:
+ print "- current.",
+ print "[%s vs %s (%s)]" % (latest_version, version, arch);
+
+ # Check for duplicated packages and build indices for checking "no source" later