X-Git-Url: https://git.decadent.org.uk/gitweb/?p=dak.git;a=blobdiff_plain;f=daklib%2Futils.py;h=5e9c9b94617d3ff39722f2b7533c72a90846e3e7;hp=d33ec308366415e874cf2dc1383a63666f5cfeb2;hb=ac7962e07a871d2619b475c54f6be2b3a79616ee;hpb=38d8ab043fa9d5bc062be20e6656f751a5025362 diff --git a/daklib/utils.py b/daklib/utils.py index d33ec308..5e9c9b94 100644 --- a/daklib/utils.py +++ b/daklib/utils.py @@ -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 @@ -72,10 +72,6 @@ default_config = "/etc/dak/dak.conf" #: default dak config, defines host pro alias_cache = None #: Cache for email alias checks key_uid_email_cache = {} #: Cache for email addresses from gpg key uids -# (hashname, function, earliest_changes_version) -known_hashes = [("sha1", apt_pkg.sha1sum, (1, 8)), - ("sha256", apt_pkg.sha256sum, (1, 8))] #: hashes we accept for entries in .changes/.dsc - # Monkeypatch commands.getstatusoutput as it may not return the correct exit # code in lenny's Python. This also affects commands.getoutput and # commands.getstatus. @@ -276,7 +272,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 @@ -311,12 +307,14 @@ def check_dsc_files(dsc_filename, dsc, dsc_files): has = defaultdict(lambda: 0) ftype_lookup = ( - (r'orig.tar.gz', ('orig_tar_gz', 'orig_tar')), - (r'diff.gz', ('debian_diff',)), - (r'tar.gz', ('native_tar_gz', 'native_tar')), + (r'orig\.tar\.(gz|bz2|xz)\.asc', ('orig_tar_sig',)), + (r'orig\.tar\.gz', ('orig_tar_gz', 'orig_tar')), + (r'diff\.gz', ('debian_diff',)), + (r'tar\.gz', ('native_tar_gz', 'native_tar')), (r'debian\.tar\.(gz|bz2|xz)', ('debian_tar',)), (r'orig\.tar\.(gz|bz2|xz)', ('orig_tar',)), (r'tar\.(gz|bz2|xz)', ('native_tar',)), + (r'orig-.+\.tar\.(gz|bz2|xz)\.asc', ('more_orig_tar_sig',)), (r'orig-.+\.tar\.(gz|bz2|xz)', ('more_orig_tar',)), ) @@ -338,10 +336,11 @@ def check_dsc_files(dsc_filename, dsc, dsc_files): # File does not match anything in lookup table; reject if not matched: - reject("%s: unexpected source file '%s'" % (dsc_filename, f)) + rejmsg.append("%s: unexpected source file '%s'" % (dsc_filename, f)) + break # Check for multiple files - for file_type in ('orig_tar', 'native_tar', 'debian_tar', 'debian_diff'): + for file_type in ('orig_tar', 'orig_tar_sig', 'native_tar', 'debian_tar', 'debian_diff'): if has[file_type] > 1: rejmsg.append("%s: lists multiple %s" % (dsc_filename, file_type)) @@ -1123,7 +1122,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 +1143,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 +1241,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''' @@ -1338,4 +1346,5 @@ def is_in_debug_section(control): @return: True if the binary package is a debug package """ section = control['Section'].split('/', 1)[-1] - return section == "debug" + auto_built_package = control.get("Auto-Built-Package") + return section == "debug" and auto_built_package == "debug-symbols"