X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=tea;h=9c5b00b786dc5633c1fa21d29fbf5851e6ef1ea3;hb=b981d2124dad87cd181b5218cc0cf7764298b896;hp=1d4c62df85d56023959e368fd694287821b28f4f;hpb=b8b597a4685189c7084950809395993ac7af3980;p=dak.git diff --git a/tea b/tea index 1d4c62df..9c5b00b7 100755 --- a/tea +++ b/tea @@ -1,8 +1,8 @@ #!/usr/bin/env python # Sanity check the database -# Copyright (C) 2000, 2001 James Troup -# $Id: tea,v 1.16 2002-02-12 23:14:58 troup Exp $ +# Copyright (C) 2000, 2001, 2002 James Troup +# $Id: tea,v 1.20 2002-06-08 00:23:51 troup Exp $ # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -62,8 +62,7 @@ def process_dir (unused, dirname, filenames): def check_files(): global db_files; - print "Building list of Database files..."; - + print "Building list of database files..."; q = projectB.query("SELECT l.path, f.filename FROM files f, location l WHERE f.location = l.id") ql = q.getresult(); @@ -74,14 +73,14 @@ def check_files(): if os.access(filename, os.R_OK) == 0: utils.warn("'%s' doesn't exist." % (filename)); - file = utils.open_file(Cnf["Dir::OverrideDir"]+'override.unreferenced'); + file = utils.open_file(Cnf["Dir::Override"]+'override.unreferenced'); for filename in file.readlines(): filename = filename[:-1]; excluded[filename] = ""; print "Checking against existent files..."; - os.path.walk(Cnf["Dir::RootDir"]+'dists/', process_dir, None); + os.path.walk(Cnf["Dir::Root"]+'dists/', process_dir, None); print print "%s wasted..." % (utils.size_type(waste)); @@ -95,12 +94,12 @@ def check_dscs(): if component == "mixed": continue; component = string.lower(component); - list_filename = '%s%s_%s_source.list' % (Cnf["Dir::ListsDir"], suite, component); + 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(): file = line[:-1]; try: - utils.parse_changes(file, 1); + utils.parse_changes(file, dsc_whitespace_rules=1); except utils.invalid_dsc_format_exc, line: utils.warn("syntax error in .dsc file '%s', line %s." % (file, line)); count = count + 1; @@ -222,6 +221,41 @@ def check_timestamps(): ################################################################################ +def check_missing_tar_gz_in_dsc(): + count = 0; + + print "Building list of database files..."; + q = projectB.query("SELECT l.path, f.filename FROM files f, location l WHERE f.location = l.id AND f.filename ~ '.dsc$'"); + ql = q.getresult(); + if ql: + print "Checking %d files..." % len(ql); + else: + print "No files to check." + for i in ql: + filename = os.path.abspath(i[0] + i[1]); + try: + # NB: don't enforce .dsc syntax + dsc = utils.parse_changes(filename); + except: + utils.fubar("error parsing .dsc file '%s'." % (filename)); + dsc_files = utils.build_file_list(dsc, is_a_dsc=1); + has_tar = 0; + for file in dsc_files.keys(): + m = utils.re_issource.match(file); + if not m: + utils.fubar("%s not recognised as source." % (file)); + type = m.group(3); + if type == "orig.tar.gz" or type == "tar.gz": + has_tar = 1; + if not has_tar: + utils.warn("%s has no .tar.gz in the .dsc file." % (file)); + count = count + 1; + + if count: + utils.warn("Found %s invalid .dsc files." % (count)); + +################################################################################ + def main (): global Cnf, projectB, db_files, waste, excluded; @@ -236,7 +270,8 @@ def main (): #check_override(); #check_dscs(); #check_files(); - check_timestamps(); + #check_timestamps(); + check_missing_tar_gz_in_dsc(); #######################################################################################