X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fcheck_archive.py;h=65dca8c649d9c50a3a9ce8107ddad30df54d54c5;hb=06ce98c8111a8b09e5603dbbd34324a216412d69;hp=6b83cd17c9ca86472ba0607cdcf265d824ba671b;hpb=ca1925d9291ec667f63dc6a895a3ac36fa9d6547;p=dak.git diff --git a/dak/check_archive.py b/dak/check_archive.py index 6b83cd17..65dca8c6 100755 --- a/dak/check_archive.py +++ b/dak/check_archive.py @@ -1,8 +1,7 @@ #!/usr/bin/env python # Various different sanity checks -# Copyright (C) 2000, 2001, 2002, 2003, 2004 James Troup -# $Id: tea,v 1.31 2004-11-27 18:03:11 troup Exp $ +# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2006 James Troup # 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 @@ -28,7 +27,7 @@ ################################################################################ import commands, os, pg, stat, string, sys, time -import db_access, utils +import dak.lib.database, dak.lib.utils import apt_pkg, apt_inst ################################################################################ @@ -45,7 +44,7 @@ current_time = time.time() ################################################################################ def usage(exit_code=0): - print """Usage: tea MODE + print """Usage: dak check-archive MODE Run various sanity checks of the archive and/or database. -h, --help show this help and exit. @@ -96,11 +95,11 @@ def check_files(): 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)) + dak.lib.utils.warn("'%s' doesn't exist." % (filename)) filename = Cnf["Dir::Override"]+'override.unreferenced' if os.path.exists(filename): - file = utils.open_file(filename) + file = dak.lib.utils.open_file(filename) for filename in file.readlines(): filename = filename[:-1] excluded[filename] = "" @@ -110,7 +109,7 @@ def check_files(): os.path.walk(Cnf["Dir::Root"]+'pool/', process_dir, None) print - print "%s wasted..." % (utils.size_type(waste)) + print "%s wasted..." % (dak.lib.utils.size_type(waste)) ################################################################################ @@ -122,17 +121,17 @@ def check_dscs(): continue component = component.lower() list_filename = '%s%s_%s_source.list' % (Cnf["Dir::Lists"], suite, component) - list_file = utils.open_file(list_filename) + list_file = dak.lib.utils.open_file(list_filename) for line in list_file.readlines(): file = line[:-1] try: - utils.parse_changes(file, signing_rules=1) - except utils.invalid_dsc_format_exc, line: - utils.warn("syntax error in .dsc file '%s', line %s." % (file, line)) + dak.lib.utils.parse_changes(file, signing_rules=1) + except dak.lib.utils.invalid_dsc_format_exc, line: + dak.lib.utils.warn("syntax error in .dsc file '%s', line %s." % (file, line)) count += 1 if count: - utils.warn("Found %s invalid .dsc files." % (count)) + dak.lib.utils.warn("Found %s invalid .dsc files." % (count)) ################################################################################ @@ -141,7 +140,7 @@ def check_override(): print suite print "-"*len(suite) print - suite_id = db_access.get_suite_id(suite) + suite_id = dak.lib.database.get_suite_id(suite) q = projectB.query(""" SELECT DISTINCT b.package FROM binaries b, bin_associations ba WHERE b.id = ba.bin AND ba.suite = %s AND NOT EXISTS @@ -200,16 +199,16 @@ def check_md5sums(): db_md5sum = i[2] db_size = int(i[3]) try: - file = utils.open_file(filename) + file = dak.lib.utils.open_file(filename) except: - utils.warn("can't open '%s'." % (filename)) + dak.lib.utils.warn("can't open '%s'." % (filename)) continue md5sum = apt_pkg.md5sum(file) size = os.stat(filename)[stat.ST_SIZE] if md5sum != db_md5sum: - utils.warn("**WARNING** md5sum mismatch for '%s' ('%s' [current] vs. '%s' [db])." % (filename, md5sum, db_md5sum)) + dak.lib.utils.warn("**WARNING** md5sum mismatch for '%s' ('%s' [current] vs. '%s' [db])." % (filename, md5sum, db_md5sum)) if size != db_size: - utils.warn("**WARNING** size mismatch for '%s' ('%s' [current] vs. '%s' [db])." % (filename, size, db_size)) + dak.lib.utils.warn("**WARNING** size mismatch for '%s' ('%s' [current] vs. '%s' [db])." % (filename, size, db_size)) print "Done." @@ -235,7 +234,7 @@ def check_timestamps(): for i in ql: filename = os.path.abspath(i[0] + i[1]) if os.access(filename, os.R_OK): - file = utils.open_file(filename) + file = dak.lib.utils.open_file(filename) current_file = filename sys.stderr.write("Processing %s.\n" % (filename)) apt_inst.debExtract(file,Ent,"control.tar.gz") @@ -260,24 +259,24 @@ def check_missing_tar_gz_in_dsc(): filename = os.path.abspath(i[0] + i[1]) try: # NB: don't enforce .dsc syntax - dsc = utils.parse_changes(filename) + dsc = dak.lib.utils.parse_changes(filename) except: - utils.fubar("error parsing .dsc file '%s'." % (filename)) - dsc_files = utils.build_file_list(dsc, is_a_dsc=1) + dak.lib.utils.fubar("error parsing .dsc file '%s'." % (filename)) + dsc_files = dak.lib.utils.build_file_list(dsc, is_a_dsc=1) has_tar = 0 for file in dsc_files.keys(): - m = utils.re_issource.match(file) + m = dak.lib.utils.re_issource.match(file) if not m: - utils.fubar("%s not recognised as source." % (file)) + dak.lib.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)) + dak.lib.utils.warn("%s has no .tar.gz in the .dsc file." % (file)) count += 1 if count: - utils.warn("Found %s invalid .dsc files." % (count)) + dak.lib.utils.warn("Found %s invalid .dsc files." % (count)) ################################################################################ @@ -286,12 +285,12 @@ def validate_sources(suite, component): filename = "%s/dists/%s/%s/source/Sources.gz" % (Cnf["Dir::Root"], suite, component) print "Processing %s..." % (filename) # apt_pkg.ParseTagFile needs a real file handle and can't handle a GzipFile instance... - temp_filename = utils.temp_filename() + temp_filename = dak.lib.utils.temp_filename() (result, output) = commands.getstatusoutput("gunzip -c %s > %s" % (filename, temp_filename)) if (result != 0): sys.stderr.write("Gunzip invocation failed!\n%s\n" % (output)) sys.exit(result) - sources = utils.open_file(temp_filename) + sources = dak.lib.utils.open_file(temp_filename) Sources = apt_pkg.ParseTagFile(sources) while Sources.Step(): source = Sources.Section.Find('Package') @@ -304,7 +303,7 @@ def validate_sources(suite, component): if directory.find("potato") == -1: print "W: %s missing." % (filename) else: - pool_location = utils.poolify (source, component) + pool_location = dak.lib.utils.poolify (source, component) pool_filename = "%s/%s/%s" % (Cnf["Dir::Pool"], pool_location, name) if not os.path.exists(pool_filename): print "E: %s missing (%s)." % (filename, pool_filename) @@ -312,7 +311,7 @@ def validate_sources(suite, component): # Create symlink pool_filename = os.path.normpath(pool_filename) filename = os.path.normpath(filename) - src = utils.clean_symlink(pool_filename, filename, Cnf["Dir::Root"]) + src = dak.lib.utils.clean_symlink(pool_filename, filename, Cnf["Dir::Root"]) print "Symlinking: %s -> %s" % (filename, src) #os.symlink(src, filename) sources.close() @@ -325,12 +324,12 @@ def validate_packages(suite, component, architecture): % (Cnf["Dir::Root"], suite, component, architecture) print "Processing %s..." % (filename) # apt_pkg.ParseTagFile needs a real file handle and can't handle a GzipFile instance... - temp_filename = utils.temp_filename() + temp_filename = dak.lib.utils.temp_filename() (result, output) = commands.getstatusoutput("gunzip -c %s > %s" % (filename, temp_filename)) if (result != 0): sys.stderr.write("Gunzip invocation failed!\n%s\n" % (output)) sys.exit(result) - packages = utils.open_file(temp_filename) + packages = dak.lib.utils.open_file(temp_filename) Packages = apt_pkg.ParseTagFile(packages) while Packages.Step(): filename = "%s/%s" % (Cnf["Dir::Root"], Packages.Section.Find('Filename')) @@ -373,10 +372,10 @@ def check_files_not_symlinks(): filename = os.path.normpath(i[0] + i[1]) # file_id = i[2] if os.access(filename, os.R_OK) == 0: - utils.warn("%s: doesn't exist." % (filename)) + dak.lib.utils.warn("%s: doesn't exist." % (filename)) else: if os.path.islink(filename): - utils.warn("%s: is a symlink." % (filename)) + dak.lib.utils.warn("%s: is a symlink." % (filename)) # You probably don't want to use the rest of this... # print "%s: is a symlink." % (filename) # dest = os.readlink(filename) @@ -391,7 +390,7 @@ def check_files_not_symlinks(): # (location, location_id) = locations[path] # break # if not location_id: -# utils.fubar("Can't find location for %s (%s)." % (dest, filename)) +# dak.lib.utils.fubar("Can't find location for %s (%s)." % (dest, filename)) # new_filename = dest.replace(location, "") # q = projectB.query("UPDATE files SET filename = '%s', location = %s WHERE id = %s" % (new_filename, location_id, file_id)) # q = projectB.query("COMMIT WORK") @@ -403,7 +402,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 = dak.lib.utils.parse_changes(filename) for field_name in [ "build-depends", "build-depends-indep" ]: field = dsc.get(field_name) if field: @@ -423,28 +422,28 @@ def check_build_depends(): def main (): global Cnf, projectB, db_files, waste, excluded - Cnf = utils.get_conf() - Arguments = [('h',"help","Tea::Options::Help")] + Cnf = dak.lib.utils.get_conf() + Arguments = [('h',"help","Check-Archive::Options::Help")] for i in [ "help" ]: - if not Cnf.has_key("Tea::Options::%s" % (i)): - Cnf["Tea::Options::%s" % (i)] = "" + if not Cnf.has_key("Check-Archive::Options::%s" % (i)): + Cnf["Check-Archive::Options::%s" % (i)] = "" args = apt_pkg.ParseCommandLine(Cnf, Arguments, sys.argv) - Options = Cnf.SubTree("Tea::Options") + Options = Cnf.SubTree("Check-Archive::Options") if Options["Help"]: usage() if len(args) < 1: - utils.warn("tea requires at least one argument") + dak.lib.utils.warn("dak check-archive requires at least one argument") usage(1) elif len(args) > 1: - utils.warn("tea accepts only one argument") + dak.lib.utils.warn("dak check-archive accepts only one argument") usage(1) mode = args[0].lower() projectB = pg.connect(Cnf["DB::Name"], Cnf["DB::Host"], int(Cnf["DB::Port"])) - db_access.init(Cnf, projectB) + dak.lib.database.init(Cnf, projectB) if mode == "md5sums": check_md5sums() @@ -467,11 +466,10 @@ def main (): elif mode == "validate-builddeps": check_build_depends() else: - utils.warn("unknown mode '%s'" % (mode)) + dak.lib.utils.warn("unknown mode '%s'" % (mode)) usage(1) ################################################################################ if __name__ == '__main__': main() -