X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fcheck_archive.py;h=a88f8ebaaacbcf99a9d705b1c233af2a4d0a93cf;hb=d0f97457b8eba235067e538971cf6271b3779208;hp=10765a89e4d77470fb0d3b2bf489a1f7764858ad;hpb=3fd49b3537079afc226a219cfbe1f807423f92c2;p=dak.git diff --git a/dak/check_archive.py b/dak/check_archive.py index 10765a89..a88f8eba 100755 --- a/dak/check_archive.py +++ b/dak/check_archive.py @@ -32,7 +32,6 @@ import commands import os -import pg import stat import sys import time @@ -41,7 +40,6 @@ import apt_inst from daklib.dbconn import * from daklib import utils -from daklib.regexes import re_issource from daklib.config import Config ################################################################################ @@ -69,7 +67,7 @@ The following MODEs are available: missing-overrides - check for missing overrides source-in-one-dir - ensure the source for each package is in one directory timestamps - check for future timestamps in .deb's - tar-gz-in-dsc - ensure each .dsc lists a .tar.gz file + files-in-dsc - ensure each .dsc references appropriate Files validate-indices - ensure files mentioned in Packages & Sources exist files-not-symlinks - check files in the database aren't symlinks validate-builddeps - validate build-dependencies of .dsc files in the archive @@ -97,8 +95,7 @@ def process_dir (unused, dirname, filenames): if dirname.find('proposed-updates') != -1: return for name in filenames: - filename = os.path.abspath(dirname+'/'+name) - filename = filename.replace('potato-proposed-updates', 'proposed-updates') + filename = os.path.abspath(os.path.join(dirname,name)) if os.path.isfile(filename) and not os.path.islink(filename) and not db_files.has_key(filename) and not excluded.has_key(filename): waste += os.stat(filename)[stat.ST_SIZE] print "%s" % (filename) @@ -121,7 +118,7 @@ def check_files(): db_files.clear() for f in q.all(): - filename = os.path.abspath(f.location.path, f.filename) + filename = os.path.abspath(os.path.join(f.location.path, f.filename)) db_files[filename] = "" if os.access(filename, os.R_OK) == 0: if f.last_used: @@ -139,7 +136,7 @@ def check_files(): print "Existent files not in db:" - os.path.walk(cnf["Dir::Root"] + 'pool/', process_dir, None) + os.path.walk(os.path.join(cnf["Dir::Root"], 'pool/'), process_dir, None) print print "%s wasted..." % (utils.size_type(waste)) @@ -164,7 +161,7 @@ def check_dscs(): for line in list_file.readlines(): f = line[:-1] try: - utils.parse_changes(f, signing_rules=1) + utils.parse_changes(f, signing_rules=1, dsc_file=1) except InvalidDscError, line: utils.warn("syntax error in .dsc file '%s', line %s." % (f, line)) count += 1 @@ -187,22 +184,22 @@ def check_override(): print suite_name print "-" * len(suite_name) print - suite = get_suite(suite) - q = s.execute(""" + suite = get_suite(suite_name) + q = session.execute(""" SELECT DISTINCT b.package FROM binaries b, bin_associations ba WHERE b.id = ba.bin AND ba.suite = :suiteid AND NOT EXISTS (SELECT 1 FROM override o WHERE o.suite = :suiteid AND o.package = b.package)""" % {'suiteid': suite.suite_id}) - for j in q: + for j in q.fetchall(): print j[0] - q = s.execute(""" + q = session.execute(""" SELECT DISTINCT s.source FROM source s, src_associations sa WHERE s.id = sa.source AND sa.suite = :suiteid AND NOT EXISTS (SELECT 1 FROM override o WHERE o.suite = :suiteid and o.package = s.source)""" % {'suiteid': suite.suite_id}) - for j in q: + for j in q.fetchall(): print j[0] ################################################################################ @@ -321,9 +318,10 @@ def check_timestamps(): ################################################################################ -def check_missing_tar_gz_in_dsc(): +def check_files_in_dsc(): """ - Ensure each .dsc lists a .tar.gz file + Ensure each .dsc lists appropriate files in its Files field (according + to the format announced in its Format field). """ count = 0 @@ -340,23 +338,15 @@ def check_missing_tar_gz_in_dsc(): try: # NB: don't enforce .dsc syntax - dsc = utils.parse_changes(filename) + dsc = utils.parse_changes(filename, dsc_file=1) except: utils.fubar("error parsing .dsc file '%s'." % (filename)) - dsc_files = utils.build_file_list(dsc, is_a_dsc=1) - has_tar = 0 + reasons = utils.check_dsc_files(filename, dsc) + for r in reasons: + utils.warn(r) - for f in dsc_files.keys(): - m = re_issource.match(f) - if not m: - utils.fubar("%s not recognised as source." % (f)) - ftype = m.group(3) - if ftype == "orig.tar.gz" or ftype == "tar.gz": - has_tar = 1 - - if not has_tar: - utils.warn("%s has no .tar.gz in the .dsc file." % (f)) + if len(reasons) > 0: count += 1 if count: @@ -436,8 +426,8 @@ def check_indices_files_exist(): """ for suite in [ "stable", "testing", "unstable" ]: for component in Cnf.ValueList("Suite::%s::Components" % (suite)): - architectures = database.get_suite_architectures(suite) - for arch in [ i.lower() for i in architectures ]: + architectures = get_suite_architectures(suite) + for arch in [ i.arch_string.lower() for i in architectures ]: if arch == "source": validate_sources(suite, component) elif arch == "all": @@ -470,7 +460,7 @@ def chk_bd_process_dir (unused, dirname, filenames): if not name.endswith(".dsc"): continue filename = os.path.abspath(dirname+'/'+name) - dsc = utils.parse_changes(filename) + dsc = utils.parse_changes(filename, dsc_file=1) for field_name in [ "build-depends", "build-depends-indep" ]: field = dsc.get(field_name) if field: @@ -484,6 +474,7 @@ def chk_bd_process_dir (unused, dirname, filenames): def check_build_depends(): """ Validate build-dependencies of .dsc files in the archive """ + cnf = Config() os.path.walk(cnf["Dir::Root"], chk_bd_process_dir, None) ################################################################################ @@ -527,8 +518,8 @@ def main (): check_source_in_one_dir() elif mode == "timestamps": check_timestamps() - elif mode == "tar-gz-in-dsc": - check_missing_tar_gz_in_dsc() + elif mode == "files-in-dsc": + check_files_in_dsc() elif mode == "validate-indices": check_indices_files_exist() elif mode == "files-not-symlinks":