X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fcruft_report.py;h=30650d4139ec7860ea35158329bf87126f06f875;hb=35cd0972b5e14dc8727403e13fccd30776f3ae02;hp=8640ea6163e02581f86885717ce1742d61520763;hpb=430daaea3b7a870b4828cccb22a15b8ead3ba965;p=dak.git diff --git a/dak/cruft_report.py b/dak/cruft_report.py index 8640ea61..30650d41 100755 --- a/dak/cruft_report.py +++ b/dak/cruft_report.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# Check for obsolete binary packages +""" Check for obsolete binary packages """ # Copyright (C) 2000, 2001, 2002, 2003, 2004, 2006 James Troup # This program is free software; you can redistribute it and/or modify @@ -31,6 +31,7 @@ import commands, pg, os, sys, time, re import apt_pkg from daklib import database from daklib import utils +from daklib.regexes import re_extract_src_version ################################################################################ @@ -167,7 +168,7 @@ def parse_nfu(architecture): f.close() else: - utils.warn("No wanna-build dump file for architecture %s", architecture) + utils.warn("No wanna-build dump file for architecture %s" % architecture) return ret ################################################################################ @@ -182,8 +183,8 @@ SELECT s.source, s.version AS experimental, s2.version AS unstable FROM src_associations sa, source s, source s2, src_associations sa2 WHERE sa.suite = %s AND sa2.suite = %d AND sa.source = s.id AND sa2.source = s2.id AND s.source = s2.source - AND versioncmp(s.version, s2.version) < 0""" % (experimental_id, - database.get_suite_id("unstable"))) + AND s.version < s2.version""" % (experimental_id, + database.get_suite_id("unstable"))) ql = q.getresult() if ql: nviu_to_remove = [] @@ -205,7 +206,7 @@ def do_nbs(real_nbs): output = "Not Built from Source\n" output += "---------------------\n\n" - nbs_to_remove = [] + cmd_output = "" nbs_keys = real_nbs.keys() nbs_keys.sort() for source in nbs_keys: @@ -215,21 +216,22 @@ def do_nbs(real_nbs): output += " but no longer builds:\n" versions = real_nbs[source].keys() versions.sort(apt_pkg.VersionCompare) + all_packages = [] for version in versions: packages = real_nbs[source][version].keys() packages.sort() - for pkg in packages: - nbs_to_remove.append(pkg) + all_packages.extend(packages) output += " o %s: %s\n" % (version, ", ".join(packages)) + if all_packages: + all_packages.sort() + cmd_output += " dak rm -m \"[auto-cruft] NBS (was built by %s)\" -s %s -b %s\n\n" % (source, suite, " ".join(all_packages)) output += "\n" - if nbs_to_remove: + if len(cmd_output): print output - - print "Suggested command:" - print " dak rm -m \"[auto-cruft] NBS\" -s %s -b %s" % (suite, " ".join(nbs_to_remove)) - print + print "Suggested commands:\n" + print cmd_output ################################################################################ @@ -377,7 +379,7 @@ def main (): for component in components: filename = "%s/dists/%s/%s/source/Sources.gz" % (Cnf["Dir::Root"], suite, component) # apt_pkg.ParseTagFile needs a real file handle and can't handle a GzipFile instance... - temp_filename = utils.temp_filename() + (fd, temp_filename) = utils.temp_filename() (result, output) = commands.getstatusoutput("gunzip -c %s > %s" % (filename, temp_filename)) if (result != 0): sys.stderr.write("Gunzip invocation failed!\n%s\n" % (output)) @@ -425,11 +427,13 @@ def main (): if suite != "experimental": check_components.append('main/debian-installer'); for component in check_components: - architectures = filter(utils.real_arch, Cnf.ValueList("Suite::%s::Architectures" % (suite))) + architectures = filter(utils.real_arch, database.get_suite_architectures(suite)) for architecture in architectures: + if component == 'main/debian-installer' and re.match("kfreebsd", architecture): + continue filename = "%s/dists/%s/%s/binary-%s/Packages.gz" % (Cnf["Dir::Root"], suite, component, architecture) # apt_pkg.ParseTagFile needs a real file handle - temp_filename = utils.temp_filename() + (fd, temp_filename) = utils.temp_filename() (result, output) = commands.getstatusoutput("gunzip -c %s > %s" % (filename, temp_filename)) if (result != 0): sys.stderr.write("Gunzip invocation failed!\n%s\n" % (output)) @@ -456,7 +460,7 @@ def main (): bin2source[package]["version"] = version bin2source[package]["source"] = source if source.find("(") != -1: - m = utils.re_extract_src_version.match(source) + m = re_extract_src_version.match(source) source = m.group(1) version = m.group(2) if not bin_pkgs.has_key(package): @@ -472,9 +476,10 @@ def main (): duplicate_bins.setdefault(key, []) if package not in duplicate_bins[key]: duplicate_bins[key].append(package) - if package in nfu_entries and \ - version != source_versions[source]: # only suggest to remove out-of-date packages - nfu_packages[architecture].append((package,version,source_versions[source])) + if "nfu" in checks: + if package in nfu_entries and \ + version != source_versions[source]: # only suggest to remove out-of-date packages + nfu_packages[architecture].append((package,version,source_versions[source])) packages.close() os.unlink(temp_filename)