X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=tea;h=9d89bbced60a3c3e788947f459de9393d4e2f3a8;hb=8e9a5d533c8458eaca33266208f6c347d66dfeef;hp=61b03a5071256f9987af5942c2eeceba1b16833d;hpb=cb4249af779812e8fc9a3f61464d06a75221125f;p=dak.git diff --git a/tea b/tea index 61b03a50..9d89bbce 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.15 2002-01-19 18:57:49 troup Exp $ +# Copyright (C) 2000, 2001, 2002 James Troup +# $Id: tea,v 1.19 2002-05-19 02:00:03 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 @@ -42,7 +42,7 @@ current_time = time.time(); ################################################################################ -def process_dir (arg, dirname, filenames): +def process_dir (unused, dirname, filenames): global waste, db_files, excluded; if string.find(dirname, '/disks-') != -1 or string.find(dirname, 'upgrade-') != -1: @@ -67,21 +67,21 @@ def check_files(): q = projectB.query("SELECT l.path, f.filename FROM files f, location l WHERE f.location = l.id") ql = q.getresult(); - db_files = {}; + db_files.clear(); for i in ql: filename = os.path.abspath(i[0] + i[1]); db_files[filename] = ""; 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 +95,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; @@ -199,14 +199,14 @@ def Ent(Kind,Name,Link,Mode,UID,GID,Size,MTime,Major,Minor): if MTime > current_time: future_files[current_file] = MTime; - print "%s: %s '%s','%s',%u,%u,%u,%u,%u" % (current_file, Kind,Name,Link,Mode,UID,GID,Size, MTime); + print "%s: %s '%s','%s',%u,%u,%u,%u,%u,%u,%u" % (current_file, Kind,Name,Link,Mode,UID,GID,Size, MTime, Major, Minor); def check_timestamps(): global current_file; q = projectB.query("SELECT l.path, f.filename FROM files f, location l WHERE f.location = l.id AND f.filename ~ '.deb$'") ql = q.getresult(); - db_files = {}; + db_files.clear(); count = 0; for i in ql: filename = os.path.abspath(i[0] + i[1]); @@ -222,6 +222,35 @@ def check_timestamps(): ################################################################################ +def check_missing_tar_gz_in_dsc(): + count = 0; + + q = projectB.query("SELECT l.path, f.filename FROM files f, location l WHERE f.location = l.id AND f.filename ~ '.dsc$'") + for i in q.getresult(): + 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 +265,8 @@ def main (): #check_override(); #check_dscs(); #check_files(); - check_timestamps(); + #check_timestamps(); + check_missing_tar_gz_in_dsc(); #######################################################################################