#!/usr/bin/env python
# Handles NEW and BYHAND packages
-# Copyright (C) 2001, 2002, 2003 James Troup <james@nocrew.org>
-# $Id: lisa,v 1.27 2004-01-29 23:18:47 dsilvers 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.27 $";
+lisa_version = "$Revision: 1.31 $";
Cnf = None;
Options = None;
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:
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();
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;
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;
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();
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"];
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':
answer = answer[:1].upper();
os.unlink(temp_filename);
if answer == 'A':
- return 1;
+ return;
elif answer == 'Q':
sys.exit(0);
# Otherwise, do the proding...
Cnf["Dinstall::MyAdminAddress"]);
Subst = Katie.Subst;
-
+
Subst["__FROM_ADDRESS__"] = user_email_address;
Subst["__PROD_MESSAGE__"] = prod_message;
Subst["__CC__"] = "Cc: " + Cnf["Dinstall::MyEmailAddress"];
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;