X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fadmin.py;h=0be5e6c0a74b9d73a73706c2859324b22dc662be;hb=245c6549dbacaeab5ee36ec74372b1df8675b477;hp=da8669895f345044ef5430f27dccfaa192c7bf13;hpb=6ea4004efd238a3dde60271fca8420ab778e9e7c;p=dak.git diff --git a/dak/admin.py b/dak/admin.py index da866989..0be5e6c0 100755 --- a/dak/admin.py +++ b/dak/admin.py @@ -24,6 +24,7 @@ import sys import apt_pkg import daklib.archive +import daklib.gpg from daklib import utils from daklib.dbconn import * @@ -100,6 +101,8 @@ Perform administrative work on the dak database. s add-all-arches SUITE VERSION... as "s add" but adds suite-architecture relationships for all architectures + s add-build-queue SUITE BUILD-QUEUE BUILD-QUEUE-CODENAME BUILD-QUEUE-ARCHIVE + add a build queue for an existing suite suite-architecture / s-a: s-a list show the architectures for all suites @@ -143,6 +146,8 @@ Perform administrative work on the dak database. change-component SUITE COMPONENT binary BINARY... Move source or binary packages to a different component by copying associated files and changing the overrides. + + forget-signature FILE: forget that we saw FILE """ sys.exit(exit_code) @@ -317,6 +322,9 @@ def __suite_add(d, args, addallarches=False): version = args[3] rest = args[3:] + if len(version) == 0: + version = None + def get_field(field): for varval in args: if varval.startswith(field + '='): @@ -381,6 +389,60 @@ def __suite_rm(d, args): die("E: Error removing suite {0} ({1})".format(name, e)) print "Suite {0} removed".format(name) +def __suite_add_build_queue(d, args): + session = d.session() + + die_arglen(args, 6, "E: Adding a build queue needs four parameters.") + + suite_name = args[2] + build_queue_name = args[3] + build_queue_codename = args[4] + build_queue_archive_name = args[5] + try: + suite = session.query(Suite).filter_by(suite_name=suite_name).one() + except NoResultFound: + die("E: Unknown suite '{0}'".format(suite_name)) + try: + build_queue_archive = session.query(Archive).filter_by(archive_name=build_queue_archive_name).one() + except NoResultFound: + die("E: Unknown archive '{0}'".format(build_queue_archive_name)) + + # Create suite + s = Suite() + s.suite_name = build_queue_name + s.origin = suite.origin + s.label = suite.label + s.description = "buildd {0} incoming".format(suite_name) + s.codename = build_queue_codename + s.notautomatic = suite.notautomatic + s.overridesuite = suite.overridesuite or suite.suite_name + s.butautomaticupgrades = suite.butautomaticupgrades + s.signingkeys = suite.signingkeys + s.include_long_description = False + + # Do not accept direct uploads to the build queue + s.accept_source_uploads = False + s.accept_binary_uploads = False + + s.archive = build_queue_archive + s.architectures.extend(suite.architectures) + s.components.extend(suite.components) + s.srcformats.extend(suite.srcformats) + + session.add(s) + session.flush() + + bq = BuildQueue() + bq.queue_name = build_queue_codename + bq.suite = s + + session.add(bq) + session.flush() + + suite.copy_queues.append(bq) + + session.commit() + def suite(command): args = [str(x) for x in command] Cnf = utils.get_conf() @@ -400,6 +462,8 @@ def suite(command): __suite_add(d, args, False) elif mode == 'add-all-arches': __suite_add(d, args, True) + elif mode == 'add-build-queue': + __suite_add_build_queue(d, args) else: die("E: suite command unknown") @@ -927,6 +991,26 @@ dispatch['change-component'] = change_component ################################################################################ +def forget_signature(args): + filename = args[1] + with open(filename, 'r') as fh: + data = fh.read() + + session = DBConn().session() + keyrings = [ k.keyring_name for k in session.query(Keyring).filter_by(active=True).order_by(Keyring.priority) ] + signed_file = daklib.gpg.SignedFile(data, keyrings) + history = SignatureHistory.from_signed_file(signed_file).query(session) + if history is not None: + session.delete(history) + session.commit() + else: + print "Signature was not known to dak." + session.rollback() + +dispatch['forget-signature'] = forget_signature + +################################################################################ + def main(): """Perform administrative work on the dak database""" global dryrun