X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fprocess_policy.py;h=a4e6d875f033a889a856a06dff128109d3d6cc21;hb=6a750dc9d7437841f93a8a94bd7cbccefc86bcf2;hp=c8c9f2d01070fd8785b05f2bd870a8b6254f8815;hpb=7db3402aa3615137ec7eb58bd3ba7ac662381d0f;p=dak.git diff --git a/dak/process_policy.py b/dak/process_policy.py index c8c9f2d0..a4e6d875 100755 --- a/dak/process_policy.py +++ b/dak/process_policy.py @@ -37,6 +37,7 @@ import re import sys import traceback import apt_pkg +from sqlalchemy.orm.exc import NoResultFound from daklib.dbconn import * from daklib import daklog @@ -108,6 +109,8 @@ def try_or_reject(function): real_comment_reject(upload, srcqueue, comments, transaction, notify=False) if not Options['No-Action']: transaction.commit() + else: + transaction.rollback() return wrapper ################################################################################ @@ -136,13 +139,19 @@ def comment_accept(upload, srcqueue, comments, transaction): component_name = 'main' if section.find('/') != -1: component_name = section.split('/', 1)[0] - return session.query(Component).filter_by(component_name=component_name).one() + return get_mapped_component(component_name, session=session) + + def is_debug_binary(db_binary): + return db_binary.proxy['Section'] == "debug" + + def has_debug_binaries(upload): + return any((is_debug_binary(x) for x in upload.binaries)) def source_component_func(db_source): package_list = PackageList(db_source.proxy) component = source_component_from_package_list(package_list, upload.target_suite) if component is not None: - return component + return get_mapped_component(component.component_name, session=session) # Fallback for packages without Package-List field query = session.query(Override).filter_by(suite=overridesuite, package=db_source.source) \ @@ -154,13 +163,54 @@ def comment_accept(upload, srcqueue, comments, transaction): all_target_suites.extend([q.suite for q in upload.target_suite.copy_queues]) for suite in all_target_suites: + debug_suite = suite.debug_suite + if upload.source is not None: - transaction.copy_source(upload.source, suite, source_component_func(upload.source), allow_tainted=allow_tainted) + # If we have Source in this upload, let's include it into + # upload suite. + transaction.copy_source( + upload.source, + suite, + source_component_func(upload.source), + allow_tainted=allow_tainted, + ) + + if debug_suite is not None and has_debug_binaries(upload): + # If we're handing a debug package, we also need to include the + # source in the debug suite as well. + transaction.copy_source( + upload.source, + debug_suite, + source_component_func(upload.source), + allow_tainted=allow_tainted, + ) + for db_binary in upload.binaries: - # build queues may miss the source package if this is a binary-only upload + # build queues may miss the source package if this is a + # binary-only upload. if suite != upload.target_suite: - transaction.copy_source(db_binary.source, suite, source_component_func(db_binary.source), allow_tainted=allow_tainted) - transaction.copy_binary(db_binary, suite, binary_component_func(db_binary), allow_tainted=allow_tainted, extra_archives=[upload.target_suite.archive]) + transaction.copy_source( + db_binary.source, + suite, + source_component_func(db_binary.source), + allow_tainted=allow_tainted, + ) + + # Now, let's work out where to copy this guy to -- if it's + # a debug binary, and the suite has a debug suite, let's go + # ahead and target the debug suite rather then the stock + # suite. + copy_to_suite = suite + if debug_suite is not None and is_debug_binary(db_binary): + copy_to_suite = debug_suite + + transaction.copy_binary( + db_binary, + copy_to_suite, + binary_component_func(db_binary), + allow_tainted=allow_tainted, + extra_archives=[upload.target_suite.archive], + ) # Copy .changes if needed if upload.target_suite.copychanges: