Add a new EAPI.definition check for cases in which EAPI is defined after an
authorZac Medico <zmedico@gentoo.org>
Sun, 26 Apr 2009 21:14:23 +0000 (21:14 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 26 Apr 2009 21:14:23 +0000 (21:14 -0000)
inherit call. Thanks to Markus Meier <maekke@g.o> for the initial patch.

svn path=/main/trunk/; revision=13401

bin/repoman
man/repoman.1
pym/repoman/checks.py
pym/repoman/errors.py

index 95a05119a2b5d983e337e5235dbae8cf56eda004..6392132350ac2d636f3cf10bf172dabe66708ae8 100755 (executable)
@@ -266,6 +266,7 @@ qahelp={
        "LICENSE.missing":"Ebuilds that have a missing or empty LICENSE variable",
        "DESCRIPTION.missing":"Ebuilds that have a missing or empty DESCRIPTION variable",
        "DESCRIPTION.toolong":"DESCRIPTION is over %d characters" % max_desc_len,
+       "EAPI.definition":"EAPI is defined after an inherit call (must be defined before)",
        "EAPI.incompatible":"Ebuilds that use features that are only available with a different EAPI",
        "EAPI.unsupported":"Ebuilds that have an unsupported EAPI version (you must upgrade portage)",
        "SLOT.missing":"Ebuilds that have a missing or empty SLOT variable",
index 6389a5fa2eeda4e3f6f3738f1177646fedbd0906..59320ca0ba094b300b605195a1a911c777614d5d 100644 (file)
@@ -105,6 +105,9 @@ Syntax error in DEPEND (usually an extra/missing space/parenthesis)
 .B DESCRIPTION.missing
 Ebuilds that have a missing or empty DESCRIPTION variable
 .TP
+.B EAPI.definition
+EAPI is defined after an inherit call (must be defined before)
+.TP
 .B EAPI.incompatible
 Ebuilds that use features that are only available with a different EAPI
 .TP
index 4588120578d9ab776dd963c772e50dc7cef99716..f1dce8b89afb38d8cd4f5acc785d5d66780a9814 100644 (file)
@@ -213,6 +213,23 @@ class EbuildUselessCdS(LineCheck):
                elif self.method_re.match(line):
                        self.check_next_line = True
 
+class EapiDefinition(LineCheck):
+       """ Check that EAPI is defined before inherits"""
+       repoman_check_name = 'EAPI.definition'
+
+       eapi_re = re.compile(r'^EAPI=')
+       inherit_re = re.compile(r'^\s*inherit\s')
+
+       def new(self, pkg):
+               self.inherit_line = None
+
+       def check(self, num, line):
+               if self.eapi_re.match(line) is not None:
+                       if self.inherit_line is not None:
+                               return errors.EAPI_DEFINED_AFTER_INHERIT
+               elif self.inherit_re.match(line) is not None:
+                       self.inherit_line = line
+
 class EbuildPatches(LineCheck):
        """Ensure ebuilds use bash arrays for PATCHES to ensure white space safety"""
        repoman_check_name = 'ebuild.patches'
@@ -349,7 +366,7 @@ _constant_checks = tuple((c() for c in (
        EbuildHeader, EbuildWhitespace, EbuildQuote,
        EbuildAssignment, EbuildUselessDodoc,
        EbuildUselessCdS, EbuildNestedDie,
-       EbuildPatches, EbuildQuotedA,
+       EbuildPatches, EbuildQuotedA, EapiDefinition,
        IUseUndefined, ImplicitRuntimeDeps, InheritAutotools,
        EMakeParallelDisabled, EMakeParallelDisabledViaMAKEOPTS,
        DeprecatedBindnowFlags, WantAutoDefaultValue)))
index 2e13e0d67f45746c0737df1681731678515ce533..bab2faca7a1abec5346a81cc44e274c0f68359a4 100644 (file)
@@ -16,3 +16,4 @@ REDUNDANT_CD_S_ERROR = 'Ebuild has redundant cd ${S} statement on line: %d'
 EMAKE_PARALLEL_DISABLED = 'Upstream parallel compilation bug (ebuild calls emake -j1 on line: %d)'
 EMAKE_PARALLEL_DISABLED_VIA_MAKEOPTS = 'Upstream parallel compilation bug (MAKEOPTS=-j1 on line: %d)'
 DEPRECATED_BINDNOW_FLAGS = 'Deprecated bindnow-flags call on line: %d'
+EAPI_DEFINED_AFTER_INHERIT = 'EAPI defined after inherit on line: %d'