################################################################################
-import commands
import errno
import fcntl
import os
-import re
-import shutil
-import stat
import sys
-import time
import traceback
-import tarfile
-import apt_inst
import apt_pkg
-from debian_bundle import deb822
from daklib.dbconn import *
-from daklib.binary import Binary
from daklib import daklog
from daklib.queue import *
from daklib import utils
################################################################################
def usage (exit_code=0):
- print """Usage: dinstall [OPTION]... [CHANGES]...
+ print """Usage: dak process-unchecked [OPTION]... [CHANGES]...
-a, --automatic automatic run
-h, --help show this help and exit.
-n, --no-action don't do anything
def action(u):
cnf = Config()
+
# changes["distribution"] may not exist in corner cases
# (e.g. unreadable changes files)
if not u.pkg.changes.has_key("distribution") or not isinstance(u.pkg.changes["distribution"], DictType):
os.chdir(u.pkg.directory)
u.do_reject(0, pi)
elif answer == 'A':
+ u.pkg.add_known_changes( "Accepted" )
u.accept(summary, short_summary)
u.check_override()
u.remove()
elif answer == queuekey:
+ u.pkg.add_known_changes( qu )
queue_info[qu]["process"](u, summary, short_summary)
u.remove()
elif answer == 'Q':
if not u.pkg.changes["distribution"].has_key(suite):
return False
+ ret = True
+
if not u.pkg.changes["architecture"].has_key("source"):
s = DBConn().session()
q = s.query(SrcAssociation.sa_id)
q = q.join(DBSource).filter_by(source=u.pkg.changes['source'])
q = q.filter_by(version=u.pkg.changes['version']).limit(1)
- if q.count() < 1:
- return False
+ # NB: Careful, this logic isn't what you would think it is
+ # Source is already in {old-,}proposed-updates so no need to hold
+ # Instead, we don't move to the holding area, we just do an ACCEPT
+ if q.count() > 0:
+ ret = False
- return True
+ s.close()
+
+ return ret
def package_to_queue(u, summary, short_summary, queue, perms=0660, build=True, announce=None):
cnf = Config()
u.pkg.write_dot_dak(dir)
u.move_to_dir(dir, perms=perms)
if build:
- get_queue(queue.lower()).autobuild_upload(u.pkg, dir)
+ get_or_set_queue(queue.lower()).autobuild_upload(u.pkg, dir)
# Check for override disparities
u.check_override()
q = session.execute("SELECT package FROM disembargo WHERE package = :source AND version = :version", u.pkg.changes)
if q.rowcount > 0:
+ session.close()
return True
oldcwd = os.getcwd()
disdir = os.getcwd()
os.chdir(oldcwd)
+ ret = False
+
if u.pkg.directory == disdir:
if u.pkg.changes["architecture"].has_key("source"):
if not Options["No-Action"]:
session.execute("INSERT INTO disembargo (package, version) VALUES (:package, :version)", u.pkg.changes)
session.commit()
- return True
+ ret = True
- return False
+ session.close()
+
+ return ret
def queue_unembargo(u, summary, short_summary):
return package_to_queue(u, summary, short_summary, "Unembargoed",
if not Options["No-Mail"]:
print "Sending new ack."
template = os.path.join(cnf["Dir::Templates"], 'process-unchecked.new')
+ u.update_subst()
u.Subst["__SUMMARY__"] = summary
new_ack_message = utils.TemplateSubst(u.Subst, template)
utils.send_mail(new_ack_message)
u.pkg.changes_file = changes_file
u.pkg.directory = os.getcwd()
u.logger = Logger
+ origchanges = os.path.join(u.pkg.directory, u.pkg.changes_file)
# Some defaults in case we can't fully process the .changes file
u.pkg.changes["maintainer2047"] = cnf["Dinstall::MyEmailAddress"]
u.pkg.changes["changedby2047"] = cnf["Dinstall::MyEmailAddress"]
# debian-{devel-,}-changes@lists.debian.org toggles writes access based on this header
- bcc = "X-DAK: dak process-unchecked\nX-Katie: $Revision: 1.65 $"
+ bcc = "X-DAK: dak process-unchecked"
if cnf.has_key("Dinstall::Bcc"):
u.Subst["__BCC__"] = bcc + "\nBcc: %s" % (cnf["Dinstall::Bcc"])
else:
# Absolutize the filename to avoid the requirement of being in the
# same directory as the .changes file.
- holding.copy_to_holding(os.path.abspath(changes_file))
+ holding.copy_to_holding(origchanges)
# Relativize the filename so we use the copy in holding
# rather than the original...
valid_changes_p = u.load_changes(changespath)
else:
valid_changes_p = False
- u.rejects.extend(rejects)
+ u.rejects.extend(rejects)
if valid_changes_p:
while u.reprocess:
u.check_distributions()
u.check_files(not Options["No-Action"])
valid_dsc_p = u.check_dsc(not Options["No-Action"])
- if valid_dsc_p:
+ if valid_dsc_p and not Options["No-Action"]:
u.check_source()
+ u.check_lintian()
u.check_hashes()
u.check_urgency()
u.check_timestamps()
action(u)
- except SystemExit:
+ except (SystemExit, KeyboardInterrupt):
raise
except: