예제 #1
0
 def check_license_family(self, pedantic=True):
     meta = self.meta
     if not pedantic:
         return
     lf = get_field(meta, 'about/license_family',
                    get_field(meta, 'about/license'))
     if lf not in LICENSE_FAMILIES:
         print("""\
     Error: license_family is invalid: %s
     Note that about/license_family falls back to about/license.
     Allowed license families are:""" % lf)
         for x in LICENSE_FAMILIES:
             print("  - %s" % x)
         raise RecipeError("wrong license family")
예제 #2
0
    def check_about(self, pedantic=True):
        meta = self.meta
        summary = get_field(meta, 'about/summary')
        if summary and len(summary) > 80:
            msg = "summary exceeds 80 characters"
            if pedantic:
                raise RecipeError(msg)
            else:
                print("Warning: %s" % msg)

        for field in ('about/home', 'about/dev_url', 'about/doc_url',
                      'about/license_url'):
            url = get_field(meta, field)
            if url:
                self.check_url(url)
        self.check_license_family(pedantic)
예제 #3
0
 def check_name(self):
     name = get_field(self.meta, "package/name")
     if name:
         name = str(name)
     else:
         raise RecipeError("package name missing")
     if not self.name_pat.match(name) or name.endswith(('.', '-', '_')):
         raise RecipeError("invalid package name '%s'" % name)
     seq = get_bad_seq(name)
     if seq:
         raise RecipeError("'%s' is not allowed in "
                           "package name: '%s'" % (seq, name))
예제 #4
0
 def validate_files(self):
     meta = self.meta
     for field in 'test/files', 'source/patches':
         flst = get_field(meta, field)
         if not flst:
             continue
         for fn in flst:
             if fn.startswith('..'):
                 raise RecipeError("path outsite recipe: %s" % fn)
             path = join(self.recipe_dir, fn)
             if isfile(path):
                 continue
             raise RecipeError("no such file '%s'" % path)
예제 #5
0
 def check_version(self):
     ver = get_field(self.meta, "package/version")
     if ver:
         ver = str(ver)
     else:
         raise RecipeError("package version missing")
     if not self.version_pat.match(ver):
         raise RecipeError("invalid version '%s'" % ver)
     if ver.startswith(('_', '.')) or ver.endswith(('_', '.')):
         raise RecipeError(
             "version cannot start or end with '_' or '.': %s" % ver)
     seq = get_bad_seq(ver)
     if seq:
         raise RecipeError("'%s' not allowed in version '%s'" % (seq, ver))
예제 #6
0
 def check_requirements(self):
     meta = self.meta
     for req in get_field(meta, 'requirements/run', []):
         name = req.split()[0]
         if not self.name_pat.match(name):
             raise RecipeError("invalid run requirement name '%s'" % name)
예제 #7
0
 def check_build_number(self):
     bn = get_field(self.meta, "build/number", 0)
     if not (isinstance(bn, int) and bn >= 0):
         raise RecipeError("build/number '%s' (not a positive interger)" %
                           bn)