]> git.decadent.org.uk Git - dak.git/blobdiff - katie.py
Add new top level directories
[dak.git] / katie.py
index f952b34f088ea0b43e0acac5c5adb0fe6f01217b..7f428318ffea66b24e305932eda4975e1730a04a 100644 (file)
--- a/katie.py
+++ b/katie.py
@@ -2,7 +2,7 @@
 
 # Utility functions for katie
 # Copyright (C) 2001, 2002, 2003, 2004, 2005  James Troup <james@nocrew.org>
-# $Id: katie.py,v 1.53 2005-01-18 22:18:55 troup Exp $
+# $Id: katie.py,v 1.59 2005-12-17 10:57:03 rmurray 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
@@ -31,9 +31,7 @@ from types import *;
 re_isanum = re.compile (r"^\d+$");
 re_default_answer = re.compile(r"\[(.*)\]");
 re_fdnic = re.compile(r"\n\n");
-re_bin_only_nmu_of_mu = re.compile(r"\.\d+\.\d+$");
-re_bin_only_nmu_of_nmu = re.compile(r"\.\d+$");
-
+re_bin_only_nmu = re.compile(r"\+b\d+$");
 ###############################################################################
 
 # Convenience wrapper to carry around all the package information in
@@ -451,26 +449,41 @@ distribution.""";
                                   changes_file[:-8]+".debinfo");
             os.rename(temp_filename, filename);
 
-        ## Special support to enable clean auto-building of accepted packages
+        self.queue_build("accepted", Cnf["Dir::Queue::Accepted"])
+
+    ###########################################################################
+
+    def queue_build (self, queue, path):
+        Cnf = self.Cnf
+        Subst = self.Subst
+        files = self.pkg.files
+        changes = self.pkg.changes
+        changes_file = self.pkg.changes_file
+        dsc = self.pkg.dsc
+        file_keys = files.keys()
+
+        ## Special support to enable clean auto-building of queued packages
+        queue_id = db_access.get_or_set_queue_id(queue)
+
         self.projectB.query("BEGIN WORK");
         for suite in changes["distribution"].keys():
-            if suite not in Cnf.ValueList("Dinstall::AcceptedAutoBuildSuites"):
+            if suite not in Cnf.ValueList("Dinstall::QueueBuildSuites"):
                 continue;
             suite_id = db_access.get_suite_id(suite);
-            dest_dir = Cnf["Dir::AcceptedAutoBuild"];
-            if Cnf.FindB("Dinstall::SecurityAcceptedAutoBuild"):
+            dest_dir = Cnf["Dir::QueueBuild"];
+            if Cnf.FindB("Dinstall::SecurityQueueBuild"):
                 dest_dir = os.path.join(dest_dir, suite);
             for file in file_keys:
-                src = os.path.join(Cnf["Dir::Queue::Accepted"], file);
+                src = os.path.join(path, file);
                 dest = os.path.join(dest_dir, file);
-                if Cnf.FindB("Dinstall::SecurityAcceptedAutoBuild"):
+                if Cnf.FindB("Dinstall::SecurityQueueBuild"):
                     # Copy it since the original won't be readable by www-data
                     utils.copy(src, dest);
                 else:
                     # Create a symlink to it
                     os.symlink(src, dest);
                 # Add it to the list of packages for later processing by apt-ftparchive
-                self.projectB.query("INSERT INTO accepted_autobuild (suite, filename, in_accepted) VALUES (%s, '%s', 't')" % (suite_id, dest));
+                self.projectB.query("INSERT INTO queue_build (suite, queue, filename, in_queue) VALUES (%s, %s, '%s', 't')" % (suite_id, queue_id, dest));
             # If the .orig.tar.gz is in the pool, create a symlink to
             # it (if one doesn't already exist)
             if self.pkg.orig_tar_id:
@@ -489,10 +502,10 @@ distribution.""";
                     src = os.path.join(ql[0][0], ql[0][1]);
                     os.symlink(src, dest);
                     # Add it to the list of packages for later processing by apt-ftparchive
-                    self.projectB.query("INSERT INTO accepted_autobuild (suite, filename, in_accepted) VALUES (%s, '%s', 't')" % (suite_id, dest));
+                    self.projectB.query("INSERT INTO queue_build (suite, queue, filename, in_queue) VALUES (%s, %s, '%s', 't')" % (suite_id, queue_id, dest));
                 # if it does, update things to ensure it's not removed prematurely
                 else:
-                    self.projectB.query("UPDATE accepted_autobuild SET in_accepted = 't', last_used = NULL WHERE filename = '%s' AND suite = %s" % (dest, suite_id));
+                    self.projectB.query("UPDATE queue_build SET in_queue = 't', last_used = NULL WHERE filename = '%s' AND suite = %s" % (dest, suite_id));
 
         self.projectB.query("COMMIT WORK");
 
@@ -660,8 +673,7 @@ distribution.""";
     # 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
+    # (2) Bin-only NMU                     => 1.0-3+b1 , 1.0-3.1+b1
 
     def source_exists (self, package, source_version, suites = ["any"]):
        okay = 1
@@ -694,17 +706,13 @@ distribution.""";
                 continue
 
             # Try (2)
-            orig_source_version = re_bin_only_nmu_of_mu.sub('', source_version)
-            if orig_source_version in ql:
-                continue
-
-            # Try (3)
-            orig_source_version = re_bin_only_nmu_of_nmu.sub('', source_version)
+            orig_source_version = re_bin_only_nmu.sub('', source_version)
             if orig_source_version in ql:
                 continue
 
             # No source found...
             okay = 0
+           break
        return okay
 
     ################################################################################
@@ -813,7 +821,8 @@ distribution.""";
                             #
                             # And - we really should complain to the dorks who configured dak
                             self.reject("%s is mapped to, but not enhanced by %s - adding anyways" % (suite, addsuite), "Warning: ")
-                            self.pkg.changes["distribution"][addsuite] = 1
+                            self.pkg.changes.setdefault("propdistribution", {})
+                            self.pkg.changes["propdistribution"][addsuite] = 1
                             cansave = 1
                         elif not target_version:
                             # not targets_version is true when the package is NEW
@@ -822,17 +831,18 @@ distribution.""";
                             self.reject("Won't propogate NEW packages.")
                         elif apt_pkg.VersionCompare(new_version, add_version) < 0:
                             # propogation would be redundant. no need to reject though.
-                            #self.reject("ignoring versionconflict: %s: old version (%s) in %s <= new version (%s) targeted at %s." % (file, existent_version, suite, new_version, target_suite), "Warning: ");
-                            self.reject("foo", "Warning: ")
+                            self.reject("ignoring versionconflict: %s: old version (%s) in %s <= new version (%s) targeted at %s." % (file, existent_version, suite, new_version, target_suite), "Warning: ")
                             cansave = 1
                         elif apt_pkg.VersionCompare(new_version, add_version) > 0 and \
-                             apt_pkg.VersionCompare(add_version, target_version) == 0:
+                             apt_pkg.VersionCompare(add_version, target_version) >= 0:
                             # propogate!!
-                            self.pkg.changes["distribution"][addsuite] = 1
+                            self.reject("Propogating upload to %s" % (addsuite), "Warning: ")
+                            self.pkg.changes.setdefault("propdistribution", {})
+                            self.pkg.changes["propdistribution"][addsuite] = 1
                             cansave = 1
                 
                     if not cansave:
-                        self.reject("%s: old version (%s) in %s <= new version (%s) targeted at %s." % (file, existent_version, suite, new_version, target_suite));
+                        self.reject("%s: old version (%s) in %s <= new version (%s) targeted at %s." % (file, existent_version, suite, new_version, target_suite))
 
     ################################################################################