blob: de899c061d8eaf5dc6d7c14cbfa6e9e2319760f6 [file] [log] [blame]
import re
from portage.eapi import (
eapi_has_src_prepare_and_src_configure, eapi_has_dosed_dohard,
eapi_exports_AA, eapi_has_pkg_pretend)
from repoman.modules.linechecks.base import LineCheck
# EAPI <2 checks
class UndefinedSrcPrepareSrcConfigurePhases(LineCheck):
repoman_check_name = 'EAPI.incompatible'
src_configprepare_re = re.compile(r'\s*(src_configure|src_prepare)\s*\(\)')
def check_eapi(self, eapi):
return not eapi_has_src_prepare_and_src_configure(eapi)
def check(self, num, line):
m = self.src_configprepare_re.match(line)
if m is not None:
return ("'%s'" % m.group(1)) + \
" phase is not defined in EAPI < 2 on line: %d"
# EAPI-3 checks
class Eapi3DeprecatedFuncs(LineCheck):
repoman_check_name = 'EAPI.deprecated'
deprecated_commands_re = re.compile(r'^\s*(check_license)\b')
def check_eapi(self, eapi):
return eapi not in ('0', '1', '2')
def check(self, num, line):
m = self.deprecated_commands_re.match(line)
if m is not None:
return ("'%s'" % m.group(1)) + \
" has been deprecated in EAPI=3 on line: %d"
# EAPI <4 checks
class UndefinedPkgPretendPhase(LineCheck):
repoman_check_name = 'EAPI.incompatible'
pkg_pretend_re = re.compile(r'\s*(pkg_pretend)\s*\(\)')
def check_eapi(self, eapi):
return not eapi_has_pkg_pretend(eapi)
def check(self, num, line):
m = self.pkg_pretend_re.match(line)
if m is not None:
return ("'%s'" % m.group(1)) + \
" phase is not defined in EAPI < 4 on line: %d"
# EAPI-4 checks
class Eapi4IncompatibleFuncs(LineCheck):
repoman_check_name = 'EAPI.incompatible'
banned_commands_re = re.compile(r'^\s*(dosed|dohard)')
def check_eapi(self, eapi):
return not eapi_has_dosed_dohard(eapi)
def check(self, num, line):
m = self.banned_commands_re.match(line)
if m is not None:
return ("'%s'" % m.group(1)) + \
" has been banned in EAPI=4 on line: %d"
class Eapi4GoneVars(LineCheck):
repoman_check_name = 'EAPI.incompatible'
undefined_vars_re = re.compile(
r'.*\$(\{(AA|KV|EMERGE_FROM)\}|(AA|KV|EMERGE_FROM))')
def check_eapi(self, eapi):
# AA, KV, and EMERGE_FROM should not be referenced in EAPI 4 or later.
return not eapi_exports_AA(eapi)
def check(self, num, line):
m = self.undefined_vars_re.match(line)
if m is not None:
return ("variable '$%s'" % m.group(1)) + \
" is gone in EAPI=4 on line: %d"