X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=jennifer;h=83a558851fbe60e028f53ec72c3acacb6792b0de;hb=d889e5903fc6da2f7ba081dca17c457a20db5fa0;hp=a2fb8dc025dba42a19d57db081ac798065f3f061;hpb=76b93eafcc3ca5e3ee8a9264637d61b91d00b167;p=dak.git diff --git a/jennifer b/jennifer index a2fb8dc0..83a55885 100755 --- a/jennifer +++ b/jennifer @@ -2,7 +2,7 @@ # Checks Debian packages from Incoming # Copyright (C) 2000, 2001 James Troup -# $Id: jennifer,v 1.13 2002-04-16 17:35:16 troup Exp $ +# $Id: jennifer,v 1.15 2002-04-22 11:06:57 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 @@ -44,7 +44,7 @@ re_is_changes = re.compile (r"(.+?)_(.+?)_(.+?)\.changes$"); ################################################################################ # Globals -jennifer_version = "$Revision: 1.13 $"; +jennifer_version = "$Revision: 1.15 $"; Cnf = None; Options = None; @@ -174,17 +174,6 @@ def get_status_output(cmd, status_read, status_write): def Dict(**dict): return dict -def prefix_multi_line_string(str, prefix): - out = ""; - for line in string.split(str, '\n'): - line = string.strip(line); - if line: - out = out + "%s %s\n" % (prefix, line); - # Strip trailing new line - if out: - out = out[:-1]; - return out; - def reject (str, prefix="Rejected: "): global reject_message; if str: @@ -261,9 +250,9 @@ def check_signature (filename): if exit_status: reject("gpgv failed while checking %s." % (filename)); if string.strip(status): - reject(prefix_multi_line_string(status, " [GPG status-fd output:]"), ""); + reject(utils.prefix_multi_line_string(status, " [GPG status-fd output:] "), ""); else: - reject(prefix_multi_line_string(output, " [GPG output:]"), ""); + reject(utils.prefix_multi_line_string(output, " [GPG output:] "), ""); return None; # Sanity check the good stuff we expect @@ -515,12 +504,15 @@ def check_files(): files[file]["type"] = "deb"; # Extract package control information + deb_file = utils.open_file(file); try: - control = apt_pkg.ParseSection(apt_inst.debExtractControl(utils.open_file(file))); + control = apt_pkg.ParseSection(apt_inst.debExtractControl(deb_file)); except: reject("%s: debExtractControl() raised %s." % (file, sys.exc_type)); + deb_file.close(); # Can't continue, none of the checks on control would work. continue; + deb_file.close(); # Check for mandatory fields for field in [ "Package", "Architecture", "Version" ]: @@ -671,10 +663,14 @@ def check_files(): if string.find(files[file]["priority"],'/') != -1: reject("file '%s' has invalid priority '%s' [contains '/']." % (file, files[file]["priority"])); - # Check the md5sum & size against existing files (if any) + # Determine the location location = Cnf["Dir::PoolDir"]; - files[file]["location id"] = db_access.get_location_id (location, component, archive); + location_id = db_access.get_location_id (location, component, archive); + if location_id == -1: + reject("[INTERNAL ERROR] couldn't determine location (Component: %s, Archive: %s)" % (component, archive)); + files[file]["location id"] = location_id; + # Check the md5sum & size against existing files (if any) files[file]["pool name"] = utils.poolify (changes["source"], files[file]["component"]); files_id = db_access.get_files_id(files[file]["pool name"] + file, files[file]["size"], files[file]["md5sum"], files[file]["location id"]); if files_id == -1: @@ -814,6 +810,7 @@ def check_md5sums (): else: if apt_pkg.md5sum(file_handle) != files[file]["md5sum"]: reject("md5sum check failed for %s." % (file)); + file_handle.close(); ################################################################################ @@ -850,6 +847,7 @@ def check_timestamps(): apt_inst.debExtract(deb_file,tar.callback,"control.tar.gz"); deb_file.seek(0); apt_inst.debExtract(deb_file,tar.callback,"data.tar.gz"); + deb_file.close(); # future_files = tar.future_files.keys(); if future_files: