コード例 #1
0
 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'])
コード例 #2
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))
コード例 #3
0
ファイル: check_archive.py プロジェクト: tanglu-org/tdak
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))
コード例 #4
0
    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
コード例 #5
0
ファイル: checks.py プロジェクト: Debian/dak
    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
コード例 #6
0
 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, [])
コード例 #7
0
ファイル: test_parse_changes.py プロジェクト: Debian/dak
 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, [])