# Checks Debian packages from Incoming
# Copyright (C) 2000, 2001, 2002, 2003, 2004 James Troup <james@nocrew.org>
-# $Id: jennifer,v 1.50 2004-06-08 23:31:05 troup Exp $
+# $Id: jennifer,v 1.53 2004-11-27 17:59:47 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
################################################################################
-re_bad_diff = re.compile("^[\-\+][\-\+][\-\+] /dev/null");
-re_is_changes = re.compile(r"(.+?)_(.+?)_(.+?)\.changes$");
re_valid_version = re.compile(r"^([0-9]+:)?[0-9A-Za-z\.\-\+:]+$");
re_valid_pkg_name = re.compile(r"^[\dA-Za-z][\dA-Za-z\+\-\.]+$");
re_changelog_versions = re.compile(r"^\w[-+0-9a-z.]+ \([^\(\) \t]+\)");
################################################################################
# Globals
-jennifer_version = "$Revision: 1.50 $";
+jennifer_version = "$Revision: 1.53 $";
Cnf = None;
Options = None;
def check_changes():
filename = pkg.changes_file;
- # Defaults in case we bail out
- changes["maintainer2047"] = Cnf["Dinstall::MyEmailAddress"];
- changes["changedby2047"] = Cnf["Dinstall::MyEmailAddress"];
- changes["architecture"] = {};
-
# Parse the .changes field into a dictionary
try:
changes.update(utils.parse_changes(filename));
if files[file]["component"] == source:
files[file]["original component"] = source;
files[file]["component"] = dest;
+
# Ensure the component is valid for the target suite
if Cnf.has_key("Suite:%s::Components" % (suite)) and \
files[file]["component"] not in Cnf.ValueList("Suite::%s::Components" % (suite)):
reject("unknown component `%s' for suite `%s'." % (files[file]["component"], suite));
continue;
- # See if the package is NEW
- if not Katie.in_override_p(files[file]["package"], files[file]["component"], suite, files[file].get("dbtype",""), file):
- files[file]["new"] = 1;
-
# Validate the component
component = files[file]["component"];
component_id = db_access.get_component_id(component);
reject("file '%s' has unknown component '%s'." % (file, component));
continue;
+ # See if the package is NEW
+ if not Katie.in_override_p(files[file]["package"], files[file]["component"], suite, files[file].get("dbtype",""), file):
+ files[file]["new"] = 1;
+
# Validate the priority
if files[file]["priority"].find('/') != -1:
reject("file '%s' has invalid priority '%s' [contains '/']." % (file, files[file]["priority"]));
# Parse the .dsc file
try:
- dsc.update(utils.parse_changes(dsc_filename, dsc_whitespace_rules=1));
+ dsc.update(utils.parse_changes(dsc_filename, signing_rules=1));
except utils.cant_open_exc:
# if not -n copy_to_holding() will have done this for us...
if Options["No-Action"]:
utils.fix_maintainer (dsc["maintainer"]);
except utils.ParseMaintError, msg:
reject("%s: Maintainer field ('%s') failed to parse: %s" \
- % (dsc_filename, changes["changed-by"], msg));
+ % (dsc_filename, dsc["maintainer"], msg));
# Validate the build-depends field(s)
for field_name in [ "build-depends", "build-depends-indep" ]:
# Reset some globals
reprocess = 1;
Katie.init_vars();
+ # Some defaults in case we can't fully process the .changes file
+ changes["maintainer2047"] = Cnf["Dinstall::MyEmailAddress"];
+ changes["changedby2047"] = Cnf["Dinstall::MyEmailAddress"];
reject_message = "";
# Absolutize the filename to avoid the requirement of being in the
# rather than the original...
pkg.changes_file = os.path.basename(pkg.changes_file);
changes["fingerprint"] = utils.check_signature(pkg.changes_file, reject);
- valid_changes_p = check_changes();
+ if changes["fingerprint"]:
+ valid_changes_p = check_changes();
+ else:
+ valid_changes_p = 0;
if valid_changes_p:
while reprocess:
check_distributions();