def test_10(self): changes = self.assertParse('dsc/10.dsc', -1, 1) files = build_file_list(changes, 1) rejmsg = check_dsc_files('10.dsc', changes, files.keys()) self.assertEqual( rejmsg, ['10.dsc: contains source files not allowed in format 1.0'])
def check_files_in_dsc(): """ Ensure each .dsc lists appropriate files in its Files field (according to the format announced in its Format field). """ count = 0 print "Building list of database files..." q = DBConn().session().query(PoolFile).filter( PoolFile.filename.like('.dsc$')) if q.count() > 0: print "Checking %d files..." % len(ql) else: print "No files to check." for pf in q.all(): filename = os.path.abspath(os.path.join(pf.location.path + pf.filename)) try: # NB: don't enforce .dsc syntax dsc = utils.parse_changes(filename, dsc_file=1) except: utils.fubar("error parsing .dsc file '%s'." % (filename)) reasons = utils.check_dsc_files(filename, dsc) for r in reasons: utils.warn(r) if len(reasons) > 0: count += 1 if count: utils.warn("Found %s invalid .dsc files." % (count))
def check_files_in_dsc(): """ Ensure each .dsc lists appropriate files in its Files field (according to the format announced in its Format field). """ count = 0 print "Building list of database files..." q = DBConn().session().query(PoolFile).filter(PoolFile.filename.like('.dsc$')) if q.count() > 0: print "Checking %d files..." % len(ql) else: print "No files to check." for pf in q.all(): filename = os.path.abspath(os.path.join(pf.location.path + pf.filename)) try: # NB: don't enforce .dsc syntax dsc = utils.parse_changes(filename, dsc_file=1) except: utils.fubar("error parsing .dsc file '%s'." % (filename)) reasons = utils.check_dsc_files(filename, dsc) for r in reasons: utils.warn(r) if len(reasons) > 0: count += 1 if count: utils.warn("Found %s invalid .dsc files." % (count))
def check(self, upload): if upload.changes.source is None: if upload.changes.sourceful: raise Reject( "{}: Architecture field includes source, but no source package is included in the upload" .format(upload.changes.filename)) return True if not upload.changes.sourceful: raise Reject( "{}: Architecture field does not include source, but a source package is included in the upload" .format(upload.changes.filename)) changes = upload.changes.changes source = upload.changes.source control = source.dsc dsc_fn = source._dsc_file.filename check_fields_for_valid_utf8(dsc_fn, control) # check fields if not re_field_package.match(control['Source']): raise Reject('{0}: Invalid Source field'.format(dsc_fn)) if control['Source'] != changes['Source']: raise Reject( '{0}: Source field does not match Source field in changes'. format(dsc_fn)) if control['Version'] != changes['Version']: raise Reject( '{0}: Version field does not match Version field in changes'. format(dsc_fn)) # check filenames self.check_filename(control, dsc_fn, re_file_dsc) for f in six.itervalues(source.files): self.check_filename(control, f.filename, re_file_source) # check dependency field syntax for field in ('Build-Conflicts', 'Build-Conflicts-Indep', 'Build-Depends', 'Build-Depends-Arch', 'Build-Depends-Indep'): value = control.get(field) if value is not None: if value.strip() == '': raise Reject('{0}: empty {1} field'.format(dsc_fn, field)) try: apt_pkg.parse_src_depends(value) except Exception as e: raise Reject( '{0}: APT could not parse {1} field: {2}'.format( dsc_fn, field, e)) rejects = utils.check_dsc_files(dsc_fn, control, list(source.files.keys())) if len(rejects) > 0: raise Reject("\n".join(rejects)) return True
def check(self, upload): if upload.changes.source is None: if "source" in upload.changes.architectures: raise Reject("{}: Architecture field includes source, but no source package is included in the upload".format(upload.changes.filename)) return True if "source" not in upload.changes.architectures: raise Reject("{}: Architecture field does not include source, but a source package is included in the upload".format(upload.changes.filename)) changes = upload.changes.changes source = upload.changes.source control = source.dsc dsc_fn = source._dsc_file.filename check_fields_for_valid_utf8(dsc_fn, control) # check fields if not re_field_package.match(control['Source']): raise Reject('{0}: Invalid Source field'.format(dsc_fn)) if control['Source'] != changes['Source']: raise Reject('{0}: Source field does not match Source field in changes'.format(dsc_fn)) if control['Version'] != changes['Version']: raise Reject('{0}: Version field does not match Version field in changes'.format(dsc_fn)) # check filenames self.check_filename(control, dsc_fn, re_file_dsc) for f in source.files.itervalues(): self.check_filename(control, f.filename, re_file_source) # check dependency field syntax for field in ('Build-Conflicts', 'Build-Conflicts-Indep', 'Build-Depends', 'Build-Depends-Arch', 'Build-Depends-Indep'): value = control.get(field) if value is not None: if value.strip() == '': raise Reject('{0}: empty {1} field'.format(dsc_fn, field)) try: apt_pkg.parse_src_depends(value) except Exception as e: raise Reject('{0}: APT could not parse {1} field: {2}'.format(dsc_fn, field, e)) rejects = utils.check_dsc_files(dsc_fn, control, source.files.keys()) if len(rejects) > 0: raise Reject("\n".join(rejects)) return True
def test_1(self): changes = self.assertParse('dsc/1.dsc', -1, 1) files = build_file_list(changes, 1) rejmsg = check_dsc_files('1.dsc', changes, files.keys()) self.assertEqual(rejmsg, [])
def test_10(self): changes = self.assertParse('dsc/10.dsc', -1, 1) files = build_file_list(changes, 1) rejmsg = check_dsc_files('10.dsc', changes, files.keys()) self.assertEqual(rejmsg, [])