]> git.decadent.org.uk Git - dak.git/blobdiff - lisa
2004-04-01 James Troup <james@nocrew.org> * jennifer (get_changelog_versions):...
[dak.git] / lisa
diff --git a/lisa b/lisa
index a1b5c90f75dd98ed877d63b3ccaca54c09752335..99319f55affff5b703afb17e20161a11ef88c487 100755 (executable)
--- a/lisa
+++ b/lisa
@@ -1,8 +1,8 @@
 #!/usr/bin/env python
 
 # Handles NEW and BYHAND packages
-# Copyright (C) 2001, 2002, 2003  James Troup <james@nocrew.org>
-# $Id: lisa,v 1.24 2003-07-29 14:00:39 ajt Exp $
+# Copyright (C) 2001, 2002, 2003, 2004  James Troup <james@nocrew.org>
+# $Id: lisa,v 1.30 2004-04-01 17:13:11 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
 
 ################################################################################
 
-import copy, errno, os, readline, stat, sys, tempfile;
+import copy, errno, os, readline, stat, sys;
 import apt_pkg, apt_inst;
 import db_access, fernanda, katie, logging, utils;
 
 # Globals
-lisa_version = "$Revision: 1.24 $";
+lisa_version = "$Revision: 1.30 $";
 
 Cnf = None;
 Options = None;
@@ -70,12 +70,16 @@ def recheck():
     reject_message = "";
 
     for file in files.keys():
+        # The .orig.tar.gz can disappear out from under us is it's a
+        # duplicate of one in the archive.
+        if not files.has_key(file):
+            continue;
         # Check that the source still exists
         if files[file]["type"] == "deb":
             source_version = files[file]["source version"];
             source_package = files[file]["source package"];
             if not Katie.pkg.changes["architecture"].has_key("source") \
-               and not Katie.source_exists(source_package, source_version, changes["distribution"].keys()):
+               and not Katie.source_exists(source_package, source_version, Katie.pkg.changes["distribution"].keys()):
                 source_epochless_version = utils.re_no_epoch.sub('', source_version);
                 dsc_filename = "%s_%s.dsc" % (source_package, source_epochless_version);
                 if not os.path.exists(Cnf["Dir::Queue::Accepted"] + '/' + dsc_filename):
@@ -390,9 +394,7 @@ def index_range (index):
 
 def edit_new (new):
     # Write the current data to a temporary file
-    temp_filename = tempfile.mktemp();
-    fd = os.open(temp_filename, os.O_RDWR|os.O_CREAT|os.O_EXCL, 0700);
-    os.close(fd);
+    temp_filename = utils.temp_filename();
     temp_file = utils.open_file(temp_filename, 'w');
     print_new (new, 0, temp_file);
     temp_file.close();
@@ -468,7 +470,7 @@ def edit_index (new, index):
             got_priority = 0;
             while not got_priority:
                 new_priority = utils.our_raw_input("New priority: ").strip();
-                if Priorities.priorities.count(new_priority) == 0:
+                if new_priority not in Priorities.priorities:
                     print "E: '%s' is not a valid priority, try again." % (new_priority);
                 else:
                     got_priority = 1;
@@ -480,7 +482,7 @@ def edit_index (new, index):
             got_section = 0;
             while not got_section:
                 new_section = utils.our_raw_input("New section: ").strip();
-                if Sections.sections.count(new_section) == 0:
+                if new_section not in Sections.sections:
                     print "E: '%s' is not a valid section, try again." % (new_section);
                 else:
                     got_section = 1;
@@ -538,9 +540,7 @@ def edit_overrides (new):
 
 def edit_note(note):
     # Write the current data to a temporary file
-    temp_filename = tempfile.mktemp();
-    fd = os.open(temp_filename, os.O_RDWR|os.O_CREAT|os.O_EXCL, 0700);
-    os.close(fd);
+    temp_filename = utils.temp_filename();
     temp_file = utils.open_file(temp_filename, 'w');
     temp_file.write(note);
     temp_file.close();
@@ -642,6 +642,52 @@ def add_overrides (new):
 
 ################################################################################
 
+def prod_maintainer ():
+    # Here we prepare an editor and get them ready to prod...
+    temp_filename = utils.temp_filename();
+    editor = os.environ.get("EDITOR","vi")
+    answer = 'E';
+    while answer == 'E':
+        os.system("%s %s" % (editor, temp_filename))
+        file = utils.open_file(temp_filename);
+        prod_message = "".join(file.readlines());
+        file.close();
+        print "Prod message:";
+        print utils.prefix_multi_line_string(prod_message,"  ",include_blank_lines=1);
+        prompt = "[P]rod, Edit, Abandon, Quit ?"
+        answer = "XXX";
+        while prompt.find(answer) == -1:
+            answer = utils.our_raw_input(prompt);
+            m = katie.re_default_answer.search(prompt);
+            if answer == "":
+                answer = m.group(1);
+            answer = answer[:1].upper();
+        os.unlink(temp_filename);
+        if answer == 'A':
+            return;
+        elif answer == 'Q':
+            sys.exit(0);
+    # Otherwise, do the proding...
+    user_email_address = utils.whoami() + " <%s>" % (
+        Cnf["Dinstall::MyAdminAddress"]);
+
+    Subst = Katie.Subst;
+
+    Subst["__FROM_ADDRESS__"] = user_email_address;
+    Subst["__PROD_MESSAGE__"] = prod_message;
+    Subst["__CC__"] = "Cc: " + Cnf["Dinstall::MyEmailAddress"];
+
+    prod_mail_message = utils.TemplateSubst(
+        Subst,Cnf["Dir::Templates"]+"/lisa.prod");
+
+    # Send the prod mail if appropriate
+    if not Cnf["Dinstall::Options::No-Mail"]:
+        utils.send_mail(prod_mail_message);
+
+    print "Sent proding message";
+
+################################################################################
+
 def do_new():
     print "NEW\n";
     files = Katie.pkg.files;
@@ -686,7 +732,7 @@ def do_new():
             print "W: note must be removed before package can be processed.";
             prompt += "Remove note, ";
 
-        prompt += "Edit overrides, Check, Manual reject, Note edit, [S]kip, Quit ?";
+        prompt += "Edit overrides, Check, Manual reject, Note edit, Prod, [S]kip, Quit ?";
 
         while prompt.find(answer) == -1:
             answer = utils.our_raw_input(prompt);
@@ -708,6 +754,8 @@ def do_new():
                 done = 1;
         elif answer == 'N':
             edit_note(changes.get("lisa note", ""));
+        elif answer == 'P':
+            prod_maintainer();
         elif answer == 'R':
             confirm = utils.our_raw_input("Really clear note (y/N)? ").lower();
             if confirm == "y":