]> git.decadent.org.uk Git - dak.git/blobdiff - lisa
Add new top level directories
[dak.git] / lisa
diff --git a/lisa b/lisa
index 4adeeb5a77feeadec69f4b9e08c91e85bfe0265a..d98c0df683c77735d3fe47c512c5209abfb52f2e 100755 (executable)
--- a/lisa
+++ b/lisa
@@ -1,8 +1,8 @@
 #!/usr/bin/env python
 
 # Handles NEW and BYHAND packages
-# Copyright (C) 2001, 2002, 2003, 2004  James Troup <james@nocrew.org>
-# $Id: lisa,v 1.29 2004-03-11 00:14:32 troup Exp $
+# Copyright (C) 2001, 2002, 2003, 2004, 2005  James Troup <james@nocrew.org>
+# $Id: lisa,v 1.31 2005-11-15 09:50:32 ajt 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, time;
 import apt_pkg, apt_inst;
 import db_access, fernanda, katie, logging, utils;
 
 # Globals
-lisa_version = "$Revision: 1.29 $";
+lisa_version = "$Revision: 1.31 $";
 
 Cnf = None;
 Options = None;
@@ -253,12 +253,12 @@ def sort_changes(changes_files):
     for source in per_source.keys():
         source_list = per_source[source]["list"];
         first = source_list[0];
-        oldest = os.stat(first["filename"])[stat.ST_CTIME];
+        oldest = os.stat(first["filename"])[stat.ST_MTIME];
         have_note = 0;
         for d in per_source[source]["list"]:
-            ctime = os.stat(d["filename"])[stat.ST_CTIME];
-            if ctime < oldest:
-                oldest = ctime;
+            mtime = os.stat(d["filename"])[stat.ST_MTIME];
+            if mtime < oldest:
+                oldest = mtime;
             have_note += (d.has_key("lisa note"));
         per_source[source]["oldest"] = oldest;
         if not have_note:
@@ -394,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();
@@ -542,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();
@@ -633,7 +629,7 @@ def add_overrides (new):
             type_id = db_access.get_override_type_id(new[pkg]["type"]);
             priority_id = new[pkg]["priority id"];
             section_id = new[pkg]["section id"];
-            projectB.query("INSERT INTO override (suite, component, type, package, priority, section) VALUES (%s, %s, %s, '%s', %s, %s)" % (suite_id, component_id, type_id, pkg, priority_id, section_id));
+            projectB.query("INSERT INTO override (suite, component, type, package, priority, section, maintainer) VALUES (%s, %s, %s, '%s', %s, %s, '')" % (suite_id, component_id, type_id, pkg, priority_id, section_id));
             for file in new[pkg]["files"]:
                 if files[file].has_key("new"):
                     del files[file]["new"];
@@ -648,9 +644,7 @@ def add_overrides (new):
 
 def prod_maintainer ():
     # Here we prepare an editor and get them ready to prod...
-    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();
     editor = os.environ.get("EDITOR","vi")
     answer = 'E';
     while answer == 'E':
@@ -670,7 +664,7 @@ def prod_maintainer ():
             answer = answer[:1].upper();
         os.unlink(temp_filename);
         if answer == 'A':
-            return 1;
+            return;
         elif answer == 'Q':
             sys.exit(0);
     # Otherwise, do the proding...
@@ -678,7 +672,7 @@ def prod_maintainer ():
         Cnf["Dinstall::MyAdminAddress"]);
 
     Subst = Katie.Subst;
-    
+
     Subst["__FROM_ADDRESS__"] = user_email_address;
     Subst["__PROD_MESSAGE__"] = prod_message;
     Subst["__CC__"] = "Cc: " + Cnf["Dinstall::MyEmailAddress"];
@@ -876,9 +870,25 @@ def do_byhand():
 def do_accept():
     print "ACCEPT";
     if not Options["No-Action"]:
+        retry = 0;
+       while retry < 10:
+           try:
+               lock_fd = os.open(Cnf["Lisa::AcceptedLockFile"], os.O_RDONLY | os.O_CREAT | os.O_EXCL);
+                retry = 10;
+           except OSError, e:
+               if errno.errorcode[e.errno] == 'EACCES' or errno.errorcode[e.errno] == 'EEXIST':
+                   retry += 1;
+                   if (retry >= 10):
+                       utils.fubar("Couldn't obtain lock; assuming jennifer is already running.");
+                   else:
+                       print("Unable to get accepted lock (try %d of 10)" % retry);
+                   time.sleep(60);
+               else:
+                   raise;
         (summary, short_summary) = Katie.build_summaries();
         Katie.accept(summary, short_summary);
         os.unlink(Katie.pkg.changes_file[:-8]+".katie");
+       os.unlink(Cnf["Lisa::AcceptedLockFile"]);
 
 def check_status(files):
     new = byhand = 0;