From 70e7979cea4f88f9ef008dc7dbb37a74a5b77afa Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sun, 26 Apr 2009 21:14:23 +0000 Subject: Add a new EAPI.definition check for cases in which EAPI is defined after an inherit call. Thanks to Markus Meier for the initial patch. svn path=/main/trunk/; revision=13401 --- bin/repoman | 1 + man/repoman.1 | 3 +++ pym/repoman/checks.py | 19 ++++++++++++++++++- pym/repoman/errors.py | 1 + 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/bin/repoman b/bin/repoman index 95a05119a..639213235 100755 --- a/bin/repoman +++ b/bin/repoman @@ -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", diff --git a/man/repoman.1 b/man/repoman.1 index 6389a5fa2..59320ca0b 100644 --- a/man/repoman.1 +++ b/man/repoman.1 @@ -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 diff --git a/pym/repoman/checks.py b/pym/repoman/checks.py index 458812057..f1dce8b89 100644 --- a/pym/repoman/checks.py +++ b/pym/repoman/checks.py @@ -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))) diff --git a/pym/repoman/errors.py b/pym/repoman/errors.py index 2e13e0d67..bab2faca7 100644 --- a/pym/repoman/errors.py +++ b/pym/repoman/errors.py @@ -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' -- cgit v1.2.3-1-g7c22