X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Futils.py;h=9d45cdc847ba814b172daa498b5a5815407037b3;hb=d7b8a9f21f1e4bc324fe113dc0a295eeb1dda729;hp=12798ab260c3a7d330a76c982d19db011fd61d29;hpb=ac84e3ea94787e97cc8354ac9132dcbf9dc922da;p=dak.git diff --git a/daklib/utils.py b/daklib/utils.py index 12798ab2..9d45cdc8 100644 --- a/daklib/utils.py +++ b/daklib/utils.py @@ -49,7 +49,7 @@ import daklib.config as config import daklib.daksubprocess from dbconn import DBConn, get_architecture, get_component, get_suite, \ get_override_type, Keyring, session_wrapper, \ - get_active_keyring_paths, get_primary_keyring_path, \ + get_active_keyring_paths, \ get_suite_architectures, get_or_set_metadatakey, DBSource, \ Component, Override, OverrideType from sqlalchemy import desc @@ -59,7 +59,7 @@ from textutils import fix_maintainer from regexes import re_html_escaping, html_escaping, re_single_line_field, \ re_multi_line_field, re_srchasver, re_taint_free, \ re_re_mark, re_whitespace_comment, re_issource, \ - re_is_orig_source, re_build_dep_arch, re_parse_maintainer + re_build_dep_arch, re_parse_maintainer from formats import parse_format, validate_changes_format from srcformats import get_format_from_string @@ -276,7 +276,7 @@ def parse_changes(filename, signing_rules=0, dsc_file=0, keyrings=None): missingfields.append(keyword) if len(missingfields): - raise ParseChangesError("Missing mandantory field(s) in changes file (policy 5.5): %s" % (missingfields)) + raise ParseChangesError("Missing mandatory field(s) in changes file (policy 5.5): %s" % (missingfields)) return changes @@ -1123,7 +1123,7 @@ def call_editor(text="", suffix=".txt"): ################################################################################ -def check_reverse_depends(removals, suite, arches=None, session=None, cruft=False, quiet=False): +def check_reverse_depends(removals, suite, arches=None, session=None, cruft=False, quiet=False, include_arch_all=True): dbsuite = get_suite(suite, session) overridesuite = dbsuite if dbsuite.overridesuite is not None: @@ -1144,7 +1144,11 @@ def check_reverse_depends(removals, suite, arches=None, session=None, cruft=Fals 'metakey_d_id': metakey_d.key_id, 'metakey_p_id': metakey_p.key_id, } - for architecture in all_arches | set(['all']): + if include_arch_all: + rdep_architectures = all_arches | set(['all']) + else: + rdep_architectures = all_arches + for architecture in rdep_architectures: deps = {} sources = {} virtual_packages = {} @@ -1238,16 +1242,21 @@ def check_reverse_depends(removals, suite, arches=None, session=None, cruft=Fals all_broken = defaultdict(set) metakey_bd = get_or_set_metadatakey("Build-Depends", session) metakey_bdi = get_or_set_metadatakey("Build-Depends-Indep", session) + if include_arch_all: + metakey_ids = (metakey_bd.key_id, metakey_bdi.key_id) + else: + metakey_ids = (metakey_bd.key_id,) + params = { 'suite_id': dbsuite.suite_id, - 'metakey_ids': (metakey_bd.key_id, metakey_bdi.key_id), + 'metakey_ids': metakey_ids, } statement = ''' SELECT s.source, string_agg(sm.value, ', ') as build_dep FROM source s JOIN source_metadata sm ON s.id = sm.src_id WHERE s.id in - (SELECT source FROM src_associations + (SELECT src FROM newest_src_association WHERE suite = :suite_id) AND sm.key_id in :metakey_ids GROUP BY s.id, s.source''' @@ -1301,3 +1310,42 @@ def check_reverse_depends(removals, suite, arches=None, session=None, cruft=Fals print return dep_problem + +################################################################################ + +def parse_built_using(control): + """source packages referenced via Built-Using + + @type control: dict-like + @param control: control file to take Built-Using field from + + @rtype: list of (str, str) + @return: list of (source_name, source_version) pairs + """ + built_using = control.get('Built-Using', None) + if built_using is None: + return [] + + bu = [] + for dep in apt_pkg.parse_depends(built_using): + assert len(dep) == 1, 'Alternatives are not allowed in Built-Using field' + source_name, source_version, comp = dep[0] + assert comp == '=', 'Built-Using must contain strict dependencies' + bu.append((source_name, source_version)) + + return bu + +################################################################################ + +def is_in_debug_section(control): + """binary package is a debug package + + @type control: dict-like + @param control: control file of binary package + + @rtype Boolean + @return: True if the binary package is a debug package + """ + section = control['Section'].split('/', 1)[-1] + auto_built_package = control.get("Auto-Built-Package") + return section == "debug" and auto_built_package == "debug-symbols"