]> git.decadent.org.uk Git - dak.git/blobdiff - katie
add notautomaitc: yes to experimental/**/Release
[dak.git] / katie
diff --git a/katie b/katie
index 410871dd52e9f4d93036f936a41aece962b27c29..37a24846e2228f214f3c28d4503a1a587771e010 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.34 2001-03-21 05:37:23 troup Exp $
+# $Id: katie,v 1.40 2001-04-16 17:45:06 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
@@ -140,8 +140,9 @@ def check_changes(filename):
     global reject_message, changes, files
 
     # Default in case we bail out
-    changes["maintainer822"] = Cnf["Dinstall::MyEmailAddress"]; 
-
+    changes["maintainer822"] = Cnf["Dinstall::MyEmailAddress"];
+    changes["changedby822"] = Cnf["Dinstall::MyEmailAddress"];
+    
     # Parse the .changes field into a dictionary
     try:
         changes = utils.parse_changes(filename, 0)
@@ -184,11 +185,6 @@ def check_changes(filename):
     # 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():
@@ -239,7 +235,7 @@ def check_changes(filename):
             # FIXME: should probably remove anything that != stable
             for i in ("frozen", "unstable"):
                 if changes["distribution"].has_key(i):
-                    reject_message = reject_message + "Removing %s from distribution list.\n"
+                    reject_message = reject_message + "Removing %s from distribution list.\n" % (i)
                     del changes["distribution"][i]
             changes["stable upload"] = 1;
             # If we can't find a file from the .changes; assume it's a package already in the pool and move into the pool
@@ -626,16 +622,27 @@ def check_override ():
 
 def update_subst (changes_filename):
     global Subst;
-    
+
     if changes.has_key("architecture"):
         Subst["__ARCHITECTURE__"] = string.join(changes["architecture"].keys(), ' ' );
+    else:
+        Subst["__ARCHITECTURE__"] = "Unknown";
     Subst["__CHANGES_FILENAME__"] = os.path.basename(changes_filename);
-    Subst["__FILE_CONTENTS__"] = changes.get("filecontents");
-    Subst["__MAINTAINER_ADDRESS__"] = changes["maintainer822"];
-    Subst["__MAINTAINER__"] = changes.get("maintainer");
+    Subst["__FILE_CONTENTS__"] = changes.get("filecontents", "");
+
+    # For source uploads the Changed-By field wins; otherwise Maintainer wins.
+    if changes["architecture"].has_key("source") and changes["changedby822"] != "" and (changes["changedby822"] != changes["maintainer822"]):
+        Subst["__MAINTAINER_FROM__"] = changes["changedby822"];
+        Subst["__MAINTAINER_TO__"] = changes["changedby822"] + ", " + changes["maintainer822"];
+        Subst["__MAINTAINER__"] = changes.get("changed-by", "Unknown");
+    else:
+        Subst["__MAINTAINER_FROM__"] = changes["maintainer822"];
+        Subst["__MAINTAINER_TO__"] = changes["maintainer822"];
+        Subst["__MAINTAINER__"] = changes.get("maintainer", "Unknown");
+
     Subst["__REJECT_MESSAGE__"] = reject_message;
-    Subst["__SOURCE__"] = changes.get("source");
-    Subst["__VERSION__"] = changes.get("version");
+    Subst["__SOURCE__"] = changes.get("source", "Unknown");
+    Subst["__VERSION__"] = changes.get("version", "Unknown");
 
 #####################################################################################################################
 
@@ -685,7 +692,11 @@ def action (changes_filename):
         answer = 'S'
 
     if string.find(reject_message, "Rejected") != -1:
-        if time.time()-os.path.getmtime(changes_filename) < 86400:
+        try:
+            modified_time = time.time()-os.path.getmtime(changes_filename);
+        except: # i.e. ignore errors like 'file does not exist';
+            modified_time = 0;
+        if modified_time < 86400:
             print "SKIP (too new)\n" + reject_message,;
             prompt = "[S]kip, Manual reject, Quit ?";
         else:
@@ -928,7 +939,8 @@ def stable_install (changes_filename, summary, short_summary):
 
     projectB.query("COMMIT WORK");
 
-    utils.move (changes_filename, Cnf["Rhona::Morgue"] + os.path.basename(changes_filename));
+    # FIXME
+    utils.move (changes_filename, Cnf["Dir::Morgue"] + '/katie/' + os.path.basename(changes_filename));
 
     # Update the Stable ChangeLog file
 
@@ -958,8 +970,9 @@ def stable_install (changes_filename, summary, short_summary):
     install_count = install_count + 1;
 
     if not Cnf["Dinstall::Options::No-Mail"]:
-        Subst["__SUITE__"] = "into stable";
+        Subst["__SUITE__"] = " into stable";
         Subst["__SUMMARY__"] = summary;
+        mail_message = utils.TemplateSubst(Subst,open(Cnf["Dir::TemplatesDir"]+"/katie.installed","r").read());
         utils.send_mail (mail_message, "")
         announce (short_summary, 1)
 
@@ -996,6 +1009,7 @@ def reject (changes_filename, manual_reject_mail_filename):
         os.write(fd, reject_message);
         os.close(fd);
         Subst["__MANUAL_REJECT_MESSAGE__"] = "";
+        Subst["__CC__"] = "X-Katie-Rejection: automatic (moo)";
         reject_mail_message = utils.TemplateSubst(Subst,open(Cnf["Dir::TemplatesDir"]+"/katie.rejected","r").read());
     else: # Have a manual rejection file to use
         reject_mail_message = ""; # avoid <undef>'s
@@ -1010,11 +1024,11 @@ def manual_reject (changes_filename):
     global Subst;
     
     # Build up the rejection email 
-    user_email_address = string.replace(string.split(pwd.getpwuid(os.getuid())[4],',')[0], '.', '')
-    user_email_address = user_email_address + " <%s@%s>" % (pwd.getpwuid(os.getuid())[0], Cnf["Dinstall::MyHost"])
+    user_email_address = utils.whoami() + " <%s@%s>" % (pwd.getpwuid(os.getuid())[0], Cnf["Dinstall::MyHost"])
     manual_reject_message = Cnf.get("Dinstall::Options::Manual-Reject", "")
 
     Subst["__MANUAL_REJECT_MESSAGE__"] = manual_reject_message;
+    Subst["__CC__"] = "Cc: " + Cnf["Dinstall::MyEmailAddress"];
     reject_mail_message = utils.TemplateSubst(Subst,open(Cnf["Dir::TemplatesDir"]+"/katie.rejected","r").read());
     
     # Write the rejection email out as the <foo>.reason file
@@ -1028,9 +1042,9 @@ def manual_reject (changes_filename):
     
     # If we weren't given one, spawn an editor so the user can add one in
     if manual_reject_message == "":
-        result = os.system("vi +6 %s" % (reject_file))
+        result = os.system("vi +6 %s" % (reject_filename))
         if result != 0:
-            sys.stderr.write ("vi invocation failed for `%s'!\n" % (reject_file))
+            sys.stderr.write ("vi invocation failed for `%s'!\n" % (reject_filename))
             sys.exit(result)
 
     # Then process it as if it were an automatic rejection
@@ -1228,7 +1242,7 @@ def main():
     Subst = {}
     Subst["__ADMIN_ADDRESS__"] = Cnf["Dinstall::MyAdminAddress"];
     Subst["__BUG_SERVER__"] = Cnf["Dinstall::BugServer"];
-    bcc = "X-Katie: $Revision: 1.34 $"
+    bcc = "X-Katie: $Revision: 1.40 $"
     if Cnf.has_key("Dinstall::Bcc"):
         Subst["__BCC__"] = bcc + "\nBcc: %s" % (Cnf["Dinstall::Bcc"]);
     else: