X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fcheck_archive.py;h=89c3dcbd82d690141e01bc2c05d981d8f5f99b72;hb=27e00376e81d1c37ff327ee0d39670b266418869;hp=6e3c795bc7b6eae4ed68e73f20b2dc924deffd62;hpb=32dc9d52c53207a6524ecf63ac7866435ae40374;p=dak.git diff --git a/dak/check_archive.py b/dak/check_archive.py index 6e3c795b..89c3dcbd 100755 --- a/dak/check_archive.py +++ b/dak/check_archive.py @@ -40,8 +40,8 @@ import apt_inst from daklib.dbconn import * from daklib import utils -from daklib.regexes import re_issource from daklib.config import Config +from daklib.dak_exceptions import InvalidDscError, ChangesUnicodeError, CantOpenError ################################################################################ @@ -96,8 +96,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) @@ -120,7 +119,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: @@ -138,7 +137,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)) @@ -150,26 +149,24 @@ def check_dscs(): Parse every .dsc file in the archive and check for it's validity. """ - cnf = Config() - count = 0 - suite = 'unstable' - - for component in cnf.SubTree("Component").List(): - component = component.lower() - list_filename = '%s%s_%s_source.list' % (cnf["Dir::Lists"], suite, component) - list_file = utils.open_file(list_filename) - - for line in list_file.readlines(): - f = line[:-1] - try: - utils.parse_changes(f, signing_rules=1) - except InvalidDscError, line: - utils.warn("syntax error in .dsc file '%s', line %s." % (f, line)) - count += 1 - except ChangesUnicodeError: - utils.warn("found invalid changes file, not properly utf-8 encoded") - count += 1 + + for src in DBConn().session().query(DBSource).order_by(DBSource.source, DBSource.version): + f = src.poolfile.fullpath + try: + utils.parse_changes(f, signing_rules=1, dsc_file=1) + except InvalidDscError: + utils.warn("syntax error in .dsc file %s" % f) + count += 1 + except ChangesUnicodeError: + utils.warn("found invalid dsc file (%s), not properly utf-8 encoded" % f) + count += 1 + except CantOpenError: + utils.warn("missing dsc file (%s)" % f) + count += 1 + except Exception as e: + utils.warn("miscellaneous error parsing dsc file (%s): %s" % (f, str(e))) + count += 1 if count: utils.warn("Found %s invalid .dsc files." % (count)) @@ -186,8 +183,8 @@ 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)""" @@ -196,7 +193,7 @@ SELECT DISTINCT b.package FROM binaries b, bin_associations ba 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)""" @@ -340,7 +337,7 @@ def check_files_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)) @@ -427,9 +424,9 @@ def check_indices_files_exist(): Ensure files mentioned in Packages & Sources 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 ]: + for component in get_component_names(): + 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": @@ -462,7 +459,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: @@ -476,6 +473,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) ################################################################################