]> git.decadent.org.uk Git - dak.git/blobdiff - katie
okay, get rid of KatieDir, and add a which_apt_conf_file to utils.py instead
[dak.git] / katie
diff --git a/katie b/katie
index 1c611a7eb634583bd77afa2b448659811081379c..4858485042cc9b77fb76397060ee46e2d17e3bf8 100755 (executable)
--- a/katie
+++ b/katie
@@ -2,7 +2,7 @@
 
 # Installs Debian packaes
 # Copyright (C) 2000  James Troup <james@nocrew.org>
-# $Id: katie,v 1.23 2001-01-27 00:09:36 troup Exp $
+# $Id: katie,v 1.29 2001-02-09 22:15:45 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
@@ -39,8 +39,6 @@ import utils, db_access
 ###############################################################################
 
 re_isanum = re.compile (r'^\d+$');
-re_isadeb = re.compile (r'.*\.u?deb$');
-re_issource = re.compile (r'(.+)_(.+?)\.(orig\.tar\.gz|diff\.gz|tar\.gz|dsc)');
 re_changes = re.compile (r'changes$');
 re_default_answer = re.compile(r"\[(.*)\]");
 re_fdnic = re.compile("\n\n");
@@ -159,18 +157,20 @@ def in_override_p (package, component, suite, binary_type, file):
 def check_changes(filename):
     global reject_message, changes, files
 
-    # Parse the .changes field into a dictionary [FIXME - need to trap errors, pass on to reject_message etc.]
+    # Default in case we bail out
+    changes["maintainer822"] = Cnf["Dinstall::MyEmailAddress"]; 
+
+    # Parse the .changes field into a dictionary
     try:
-        changes = utils.parse_changes(filename)
+        changes = utils.parse_changes(filename, 0)
     except utils.cant_open_exc:
         reject_message = "Rejected: can't read changes file '%s'.\n" % (filename)
         return 0;
     except utils.changes_parse_error_exc, line:
         reject_message = "Rejected: error parsing changes file '%s', can't grok: %s.\n" % (filename, line)
-        changes["maintainer822"] = Cnf["Dinstall::MyEmailAddress"];
         return 0;
 
-    # Parse the Files field from the .changes into another dictionary [FIXME need to trap errors as above]
+    # Parse the Files field from the .changes into another dictionary
     try:
         files = utils.build_file_list(changes, "");
     except utils.changes_parse_error_exc, line:
@@ -182,9 +182,6 @@ def check_changes(filename):
             reject_message = "Rejected: Missing field `%s' in changes file.\n" % (i)
             return 0    # Avoid <undef> errors during later tests
 
-    # Fix the Maintainer: field to be RFC822 compatible
-    (changes["maintainer822"], changes["maintainername"], changes["maintaineremail"]) = utils.fix_maintainer (changes["maintainer"])
-
     # Override the Distribution: field if appropriate
     if Cnf["Dinstall::Options::Override-Distribution"] != "":
         reject_message = reject_message + "Warning: Distribution was overriden from %s to %s.\n" % (changes["distribution"], Cnf["Dinstall::Options::Override-Distribution"])
@@ -199,6 +196,17 @@ def check_changes(filename):
         for j in string.split(o):
             changes[i][j] = 1
 
+    # Fix the Maintainer: field to be RFC822 compatible
+    (changes["maintainer822"], changes["maintainername"], changes["maintaineremail"]) = utils.fix_maintainer (changes["maintainer"])
+
+    # Fix the Changed-By: field to be RFC822 compatible; if it exists.
+    (changes["changedby822"], changes["changedbyname"], changes["changedbyemail"]) = utils.fix_maintainer(changes.get("changed-by",""));
+
+    # For source uploads the Changed-By field wins; otherwise Maintainer wins.
+    if changes["architecture"].has_key("source"):
+        changes["uploader822"] = "To: %s\nCc: %s" % (changes["changedby822"], changes["maintainer822"]);
+         #         changes["uploadername"], changes["uploaderemail"]) = (changes["changedby822"], changes["changedbyname"], changes["changedbyemail"]);
+        
     # Ensure all the values in Closes: are numbers
     if changes.has_key("closes"):
         for i in changes["closes"].keys():
@@ -288,7 +296,7 @@ def check_files():
             files[file]["byhand"] = 1;
             files[file]["type"] = "byhand";
         # Checks for a binary package...
-        elif re_isadeb.match(file) != None:
+        elif utils.re_isadeb.match(file) != None:
             files[file]["type"] = "deb";
 
             # Extract package information using dpkg-deb
@@ -342,7 +350,7 @@ def check_files():
                 files[file]["source"] = files[file]["package"];
         # Checks for a source package...
         else:
-            m = re_issource.match(file)
+            m = utils.re_issource.match(file)
             if m != None:
                 files[file]["package"] = m.group(1)
                 files[file]["version"] = m.group(2)
@@ -419,6 +427,10 @@ def check_files():
             if component_id == -1:
                 reject_message = reject_message + "Rejected: file '%s' has unknown component '%s'.\n" % (file, component);
                 continue;
+
+            # Validate the priority
+            if string.find(files[file]["priority"],'/') != -1:
+                reject_message = reject_message + "Rejected: file '%s' has invalid priority '%s' [contains '/'].\n" % (file, files[file]["priority"]);
             
             # Check the md5sum & size against existing files (if any)
             location = Cnf["Dir::PoolDir"];
@@ -450,13 +462,16 @@ def check_dsc ():
     for file in files.keys():
         if files[file]["type"] == "dsc":
             try:
-                dsc = utils.parse_changes(file)
+                dsc = utils.parse_changes(file, 1)
             except utils.cant_open_exc:
                 reject_message = reject_message + "Rejected: can't read changes file '%s'.\n" % (filename)
                 return 0;
             except utils.changes_parse_error_exc, line:
                 reject_message = reject_message + "Rejected: error parsing changes file '%s', can't grok: %s.\n" % (filename, line)
                 return 0;
+            except utils.invalid_dsc_format_exc, line:
+                reject_message = reject_message + "Rejected: syntax error in .dsc file '%s', line %s.\n" % (filename, line)
+                return 0;
             try:
                 dsc_files = utils.build_file_list(dsc, 1)
             except utils.no_files_exc:
@@ -494,7 +509,6 @@ def check_dsc ():
                     q = projectB.query("SELECT l.path, f.filename, l.type, f.id FROM files f, location l WHERE (f.filename ~ '/%s$' OR f.filename = '%s') AND l.id = f.location" % (utils.regex_safe(dsc_file), dsc_file));
                     ql = q.getresult();
 
-
                     if ql != []:
                         # Unfortunately, we make get more than one match
                         # here if, for example, the package was in potato
@@ -599,19 +613,18 @@ def check_override ():
 
     summary = ""
     for file in files.keys():
-        if not files[file].has_key("new") and (files[file]["type"] == "dsc" or files[file]["type"] == "deb"):
+        if not files[file].has_key("new") and files[file]["type"] == "deb":
             section = files[file]["section"];
             override_section = files[file]["override section"];
             if section != override_section and section != "-":
                 # Ignore this; it's a common mistake and not worth whining about
-                if section == "non-US/main" and override_section == "non-US":
+                if string.lower(section) == "non-us/main" and string.lower(override_section) == "non-us":
                     continue;
                 summary = summary + "%s: section is overridden from %s to %s.\n" % (file, section, override_section);
-            if files[file]["type"] == "deb": # don't do priority for source
-                priority = files[file]["priority"];
-                override_priority = files[file]["override priority"];
-                if priority != override_priority and priority != "-":
-                    summary = summary + "%s: priority is overridden from %s to %s.\n" % (file, priority, override_priority);
+            priority = files[file]["priority"];
+            override_priority = files[file]["override priority"];
+            if priority != override_priority and priority != "-":
+                summary = summary + "%s: priority is overridden from %s to %s.\n" % (file, priority, override_priority);
 
     if summary == "":
         return;
@@ -931,7 +944,7 @@ def stable_install (changes_filename, summary, short_summary):
     for file in files.keys():
         if files[file]["type"] == "deb":
             new_changelog.write("stable/%s/binary-%s/%s\n" % (files[file]["component"], files[file]["architecture"], file));
-        elif re_issource.match(file) != None:
+        elif utils.re_issource.match(file) != None:
             new_changelog.write("stable/%s/source/%s\n" % (files[file]["component"], file));
         else:
             new_changelog.write("%s\n" % (file));
@@ -974,15 +987,15 @@ def reject (changes_filename, manual_reject_mail_filename):
     # Move the .changes files and it's contents into REJECT/ (if we can; errors are ignored)
     try:
         utils.move (changes_filename, "%s/REJECT/%s" % (Cnf["Dir::IncomingDir"], base_changes_filename));
-    except utils.cant_overwrite_exc:
-        sys.stderr.write("W: couldn't overwrite existing file '%s/REJECT/%s" % (Cnf["Dir::IncomingDir"], base_changes_filename));
+    except:
+        sys.stderr.write("W: couldn't reject changes file '%s' [Got %s]" % (base_changes_filename, sys.exc_type));
         pass;
     for file in files.keys():
         if os.path.exists(file):
             try:
                 utils.move (file, "%s/REJECT/%s" % (Cnf["Dir::IncomingDir"], file));
             except:
-                sys.stderr.write("W: couldn't reject file '%s' [Got %s].\n" % (file, sys.exc_type);
+                sys.stderr.write("W: couldn't reject file '%s' [Got %s].\n" % (file, sys.exc_type));
                 pass;
 
     # If this is not a manual rejection generate the .reason file and rejection mail message
@@ -1152,7 +1165,7 @@ administrators by mailing ftpmaster@debian.org)
         control_message = ""
         for bug in bugs:
             summary = summary + "%s " % (bug)
-            control_message = control_message + "severity %s fixed\n" % (bug)
+            control_message = control_message + "tag %s + fixed\n" % (bug)
         if action and control_message != "":
             mail_message = """Return-Path: %s
 From: %s
@@ -1184,7 +1197,7 @@ non-maintainer upload.  The .changes file follows.
 # into the .changes structure and reprocess the .changes file.
 
 def process_it (changes_file):
-    global reprocess, orig_tar_id, changes, dsc, dsc_files, files;
+    global reprocess, orig_tar_id, changes, dsc, dsc_files, files, reject_message;
 
     # Reset some globals
     reprocess = 1;
@@ -1222,7 +1235,7 @@ def process_it (changes_file):
 ###############################################################################
 
 def main():
-    global Cnf, projectB, reject_message, install_bytes, new_ack_old
+    global Cnf, projectB, install_bytes, new_ack_old
 
     apt_pkg.init();