From 6ea4004efd238a3dde60271fca8420ab778e9e7c Mon Sep 17 00:00:00 2001 From: Ansgar Burchardt Date: Wed, 25 Jun 2014 21:29:53 +0200 Subject: [PATCH] Add change-component command. --- dak/admin.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/dak/admin.py b/dak/admin.py index 106393d6..da866989 100755 --- a/dak/admin.py +++ b/dak/admin.py @@ -23,6 +23,8 @@ import sys import apt_pkg +import daklib.archive + from daklib import utils from daklib.dbconn import * from sqlalchemy.orm.exc import NoResultFound @@ -135,6 +137,12 @@ Perform administrative work on the dak database. where CHECK is one of Enhances, MustBeNewerThan, MustBeOlderThan REFERENCE is another suite name + + change-component: + change-component SUITE COMPONENT source SOURCE... + change-component SUITE COMPONENT binary BINARY... + Move source or binary packages to a different component by copying + associated files and changing the overrides. """ sys.exit(exit_code) @@ -870,6 +878,55 @@ dispatch['k'] = keyring ################################################################################ +def change_component_source(transaction, suite, component, source_names): + session = transaction.session + + overrides = session.query(Override).filter(Override.package.in_(source_names)).filter_by(suite=suite).join(OverrideType).filter_by(overridetype='dsc') + for override in overrides: + print "Changing override for {0}".format(override.package) + override.component = component + session.flush() + + sources = session.query(DBSource).filter(DBSource.source.in_(source_names)).filter(DBSource.suites.contains(suite)) + for source in sources: + print "Copying {0}={1}".format(source.source, source.version) + transaction.copy_source(source, suite, component) + +def change_component_binary(transaction, suite, component, binary_names): + session = transaction.session + + overrides = session.query(Override).filter(Override.package.in_(binary_names)).filter_by(suite=suite).join(OverrideType).filter(OverrideType.overridetype.in_(['deb', 'udeb'])) + for override in overrides: + print "Changing override for {0}".format(override.package) + override.component = component + session.flush() + + binaries = session.query(DBBinary).filter(DBBinary.package.in_(binary_names)).filter(DBBinary.suites.contains(suite)) + for binary in binaries: + print "Copying {0}={1} [{2}]".format(binary.package, binary.version, binary.architecture.arch_string) + transaction.copy_binary(binary, suite, component) + pass + +def change_component(args): + with daklib.archive.ArchiveTransaction() as transaction: + session = transaction.session + + suite = session.query(Suite).filter_by(suite_name=args[1]).one() + component = session.query(Component).filter_by(component_name=args[2]).one() + + if args[3] == 'source': + change_component_source(transaction, suite, component, args[4:]) + elif args[3] == 'binary': + change_component_binary(transaction, suite, component, args[4:]) + else: + raise Exception("Can only move source or binary, not {0}".format(args[3])) + + transaction.commit() + +dispatch['change-component'] = change_component + +################################################################################ + def main(): """Perform administrative work on the dak database""" global dryrun -- 2.39.2