X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fchecks.py;h=cae801e489f341c370d22ad982313ff0553fe4b6;hb=9eff87cf703b5fe3310570ab30ff922e62f2957a;hp=2e76e78329c8e6fd57d74e2d0d890d33d64f55ba;hpb=1617994b76d0cd90ce89a7e6d9f7bb886439f010;p=dak.git diff --git a/daklib/checks.py b/daklib/checks.py index 2e76e783..cae801e4 100644 --- a/daklib/checks.py +++ b/daklib/checks.py @@ -30,10 +30,12 @@ from daklib.regexes import * from daklib.textutils import fix_maintainer, ParseMaintError import daklib.lintian as lintian import daklib.utils as utils +from daklib.upload import InvalidHashException import apt_inst import apt_pkg from apt_pkg import version_compare +import errno import os import time import yaml @@ -165,13 +167,25 @@ class ChangesCheck(Check): class HashesCheck(Check): """Check hashes in .changes and .dsc are valid.""" def check(self, upload): - changes = upload.changes - for f in changes.files.itervalues(): - f.check(upload.directory) - source = changes.source - if source is not None: - for f in source.files.itervalues(): + what = None + try: + changes = upload.changes + what = changes.filename + for f in changes.files.itervalues(): f.check(upload.directory) + source = changes.source + if source is not None: + what = source.filename + for f in source.files.itervalues(): + f.check(upload.directory) + except IOError as e: + if e.errno == errno.ENOENT: + raise Reject('{0} refers to non-existing file: {1}\n' + 'Perhaps you need to include it in your upload?' + .format(what, os.path.basename(e.filename))) + raise + except InvalidHashException as e: + raise Reject('{0}: {1}'.format(what, unicode(e))) class ExternalHashesCheck(Check): """Checks hashes in .changes and .dsc against an external database.""" @@ -450,8 +464,11 @@ class ACLCheck(Check): # XXX: Drop DMUA part here and switch to new implementation. # XXX: Send warning mail once users can set the new DMUA flag dmua_status, dmua_reason = self._check_dmua(upload) - if not dmua_status: - return False, dmua_reason + if acl_per_source is None: + if not dmua_status: + return False, dmua_reason + else: + upload.warn('DM flag not set, but accepted as DMUA was set.') #if acl_per_source is None: # return False, "not allowed to upload source package '{0}'".format(source_name) if acl.deny_per_source and acl_per_source is not None: