]> git.decadent.org.uk Git - dak.git/blobdiff - melanie
katie.py: update to +bX binNMU versioning
[dak.git] / melanie
diff --git a/melanie b/melanie
index 6b10c60c084761ac52f79446d230c282cbb89196..3b2596ccc4170ec5ed67d9c252efcd7301a2a910 100755 (executable)
--- a/melanie
+++ b/melanie
@@ -2,7 +2,7 @@
 
 # General purpose package removal tool for ftpmaster
 # Copyright (C) 2000, 2001, 2002, 2003, 2004  James Troup <james@nocrew.org>
-# $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;