X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=melanie;h=3b2596ccc4170ec5ed67d9c252efcd7301a2a910;hb=c0065a491661ad115cb59ed84c47e638744b9823;hp=6b10c60c084761ac52f79446d230c282cbb89196;hpb=1c22942feaaa4487e9e5c28da39d9b9ec467523c;p=dak.git diff --git a/melanie b/melanie index 6b10c60c..3b2596cc 100755 --- a/melanie +++ b/melanie @@ -2,7 +2,7 @@ # General purpose package removal tool for ftpmaster # Copyright (C) 2000, 2001, 2002, 2003, 2004 James Troup -# $Id: melanie,v 1.41 2004-06-24 00:41:39 troup Exp $ +# $Id: melanie,v 1.44 2005-11-15 09:50:32 ajt 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 @@ -98,14 +98,20 @@ def reverse_depends_check(removals, suites): print "Checking reverse dependencies..." components = Cnf.ValueList("Suite::%s::Components" % suites[0]) dep_problem = 0 + p2c = {}; for architecture in Cnf.ValueList("Suite::%s::Architectures" % suites[0]): if architecture in ["source", "all"]: continue - deps = {} - virtual_packages = {} + deps = {}; + virtual_packages = {}; for component in components: - filename = "%s/dists/%s/%s/binary-%s/Packages" % (Cnf["Dir::Root"], suites[0], component, architecture) - packages = utils.open_file(filename, "r") + filename = "%s/dists/%s/%s/binary-%s/Packages.gz" % (Cnf["Dir::Root"], suites[0], component, architecture) + # apt_pkg.ParseTagFile needs a real file handle and can't handle a GzipFile instance... + temp_filename = utils.temp_filename(); + (result, output) = commands.getstatusoutput("gunzip -c %s > %s" % (filename, temp_filename)); + if (result != 0): + utils.fubar("Gunzip invocation failed!\n%s\n" % (output), result); + packages = utils.open_file(temp_filename); Packages = apt_pkg.ParseTagFile(packages) while Packages.Step(): package = Packages.Section.Find("Package") @@ -127,7 +133,9 @@ def reverse_depends_check(removals, suites): virtual_packages[virtual_pkg] = 0 if package not in removals: virtual_packages[virtual_pkg] += 1 + p2c[package] = component; packages.close() + os.unlink(temp_filename); # If a virtual package is only provided by the to-be-removed # packages, treat the virtual package as to-be-removed too. @@ -152,7 +160,12 @@ def reverse_depends_check(removals, suites): if dep_package in removals: unsat += 1 if unsat == len(dep): - print "%s has an unsatisfied dependency on %s: %s" % (package, architecture, utils.pp_dep(dep)) + component = p2c[package]; + if component != "main": + what = "%s/%s" % (package, component); + else: + what = "** %s" % (package); + print "%s has an unsatisfied dependency on %s: %s" % (what, architecture, utils.pp_deps(dep)); dep_problem = 1 # Check source dependencies (Build-Depends and Build-Depends-Indep) @@ -185,7 +198,11 @@ def reverse_depends_check(removals, suites): if dep_package in removals: unsat += 1 if unsat == len(dep): - print "%s has an unsatisfied build-dependency: %s" % (source, utils.pp_dep(dep)) + if component != "main": + source = "%s/%s" % (source, component); + else: + source = "** %s" % (source); + print "%s has an unsatisfied build-dependency: %s" % (source, utils.pp_deps(dep)) dep_problem = 1 sources.close() os.unlink(temp_filename) @@ -251,8 +268,8 @@ def main (): # Force the admin to tell someone if we're not doing a rene-led removal # (or closing a bug, which counts as telling someone). - if not Options["Carbon-Copy"] and not Options["Done"] \ - and Options["Reason"].find("[rene]") == -1: + if not Options["No-Action"] and not Options["Carbon-Copy"] \ + and not Options["Done"] and Options["Reason"].find("[rene]") == -1: utils.fubar("Need a -C/--carbon-copy if not closing a bug and not doing a rene-led removal."); # Process -C/--carbon-copy @@ -492,7 +509,7 @@ def main (): Subst["__BCC__"] = "Bcc: " + ", ".join(bcc); else: Subst["__BCC__"] = "X-Filler: 42"; - Subst["__CC__"] = "X-Katie: melanie $Revision: 1.41 $"; + Subst["__CC__"] = "X-Katie: melanie $Revision: 1.44 $"; if carbon_copy: Subst["__CC__"] += "\nCc: " + ", ".join(carbon_copy); Subst["__SUITE_LIST__"] = suites_list;