aboutsummaryrefslogtreecommitdiff
blob: 33bef8a08e0460491d9d3de6ccc54d8a8c819388 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import re

from portage.eapi import eapi_supports_prefix, eapi_has_broot
from repoman.modules.linechecks.base import LineCheck


class EbuildAssignment(LineCheck):
	"""Ensure ebuilds don't assign to readonly variables."""

	repoman_check_name = 'variable.readonly'
	read_only_vars = 'A|CATEGORY|P|P[VNRF]|PVR|D|WORKDIR|FILESDIR|FEATURES|USE'
	readonly_assignment = re.compile(r'^\s*(export\s+)?(%s)=' % read_only_vars)

	def check(self, num, line):
		match = self.readonly_assignment.match(line)
		e = None
		if match is not None:
			e = self.errors['READONLY_ASSIGNMENT_ERROR']
		return e


class Eapi3EbuildAssignment(EbuildAssignment):
	"""Ensure ebuilds don't assign to readonly EAPI 3-introduced variables."""

	read_only_vars = 'ED|EPREFIX|EROOT'
	readonly_assignment = re.compile(r'\s*(export\s+)?(%s)=' % read_only_vars)

	def check_eapi(self, eapi):
		return eapi_supports_prefix(eapi)

class Eapi7EbuildAssignment(EbuildAssignment):
	"""Ensure ebuilds don't assign to readonly EAPI 7-introduced variables."""

	readonly_assignment = re.compile(r'\s*(export\s+)?BROOT=')

	def check_eapi(self, eapi):
		return eapi_has_broot(eapi)