]> git.decadent.org.uk Git - dak.git/commitdiff
Fix bin-only NMUs of NMUs.
authorJames Troup <james@nocrew.org>
Sat, 23 Jun 2001 16:57:26 +0000 (16:57 +0000)
committerJames Troup <james@nocrew.org>
Sat, 23 Jun 2001 16:57:26 +0000 (16:57 +0000)
TODO
katie

diff --git a/TODO b/TODO
index ddbf00d2f5e40e0a1c184cd50b5a3961c53de7a4..17ead560c683de1aabbeff02188c941f81f0e6c1 100644 (file)
--- a/TODO
+++ b/TODO
@@ -14,8 +14,6 @@ More Urgent
       table.  Then fix charisma to use them and write some scripting
       to handle the Santiago situation. ]
 
-  o Fix binary-only NMUs of NMUs in katie's source-must-exist check.
-
 Less Urgent
 -----------
 
@@ -70,6 +68,10 @@ TODO
 More Urgent
 -----------
 
+  o testing-updates suite: if binary-only and version << version in
+    unstable and source-ver ~= source-ver in testing; then map
+    unstable -> testing-updates ?
+
   o katie needs a stable_reject() which a) removes the package from
     p-u, b) doesn't remove the file from the pool, and c) (optionally, I
     guess) uses a template mail.
diff --git a/katie b/katie
index 700791ca33f6d813d6dff775070fa3d59542363e..4db6937c47a7a989f24999f86290b9a7ad0031e4 100755 (executable)
--- a/katie
+++ b/katie
@@ -2,7 +2,7 @@
 
 # Installs Debian packaes
 # Copyright (C) 2000, 2001  James Troup <james@nocrew.org>
-# $Id: katie,v 1.47 2001-06-22 22:53:14 troup Exp $
+# $Id: katie,v 1.48 2001-06-23 16:57:26 troup 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
@@ -43,7 +43,8 @@ re_changes = re.compile (r"changes$");
 re_default_answer = re.compile(r"\[(.*)\]");
 re_fdnic = re.compile("\n\n");
 re_bad_diff = re.compile("^[\-\+][\-\+][\-\+] /dev/null");
-re_bin_only_nmu = re.compile("\.\d+\.\d+$");
+re_bin_only_nmu_of_mu = re.compile("\.\d+\.\d+$");
+re_bin_only_nmu_of_nmu = re.compile("\.\d+$");
 
 #########################################################################################
 
@@ -130,6 +131,38 @@ class nmu_p:
     
 ######################################################################################################
 
+# Ensure that source exists somewhere in the archive for the binary
+# upload being processed.  
+#
+# (1) exact match                      => 1.0-3
+# (2) Bin-only NMU of an MU            => 1.0-3.0.1
+# (3) Bin-only NMU of a sourceful-NMU  => 1.0-3.1.1
+
+def source_exists (package, source_version):
+    q = projectB.query("SELECT s.version FROM source s WHERE s.source = '%s'" % (package));
+
+    # Reduce the query results to a list of version numbers
+    ql = map(lambda x: x[0], q.getresult());
+
+    # Try (1)
+    if ql.count(source_version):
+        return 1;
+
+    # Try (2)
+    orig_source_version = re_bin_only_nmu_of_mu.sub('', source_version);
+    if ql.count(orig_source_version):
+        return 1;
+
+    # Try (3)
+    orig_source_version = re_bin_only_nmu_of_nmu.sub('', source_version);
+    if ql.count(orig_source_version):
+        return 1;
+
+    # No source found...
+    return 0;
+
+######################################################################################################
+
 # See if a given package is in the override table
 
 def in_override_p (package, component, suite, binary_type, file):
@@ -453,16 +486,8 @@ def check_files():
                     if source_version != changes["version"]:
                         reject_message = reject_message + "Rejected: source version (%s) for %s doesn't match changes version %s.\n" % (files[file]["sourceversion"], file, changes["version"]);
                 else:
-                    q = projectB.query("SELECT s.version FROM source s WHERE s.source = '%s'" % (files[file]["source package"]));
-                    ql = map(lambda x: x[0], q.getresult());
-                    if ql.count(source_version) == 0:
-                        # Maybe it's a binary only NMU ?
-                        if re_bin_only_nmu.search(source_version):
-                            orig_source_version = re_bin_only_nmu.sub('', source_version);
-                            if ql.count(orig_source_version) == 0:
-                                reject_message = reject_message + "Rejected: no source version (%s [or %s]) found in %s for %s (%s).\n" % (source_version, orig_source_version, suite, files[file]["source package"], file);
-                        else:
-                            reject_message = reject_message + "Rejected: no source version (%s) found in %s for %s (%s).\n" % (source_version, suite, files[file]["source package"], file);
+                    if not source_exists (files[file]["source package"], source_version):
+                        reject_message = reject_message + "Rejected: no source found for %s %s (%s).\n" % (files[file]["source package"], source_version, file);
 
             # Find any old .dsc files
             elif files[file]["type"] == "dsc":
@@ -1307,7 +1332,7 @@ def main():
     Subst = {}
     Subst["__ADMIN_ADDRESS__"] = Cnf["Dinstall::MyAdminAddress"];
     Subst["__BUG_SERVER__"] = Cnf["Dinstall::BugServer"];
-    bcc = "X-Katie: $Revision: 1.47 $"
+    bcc = "X-Katie: $Revision: 1.48 $"
     if Cnf.has_key("Dinstall::Bcc"):
         Subst["__BCC__"] = bcc + "\nBcc: %s" % (Cnf["Dinstall::Bcc"]);
     else: