Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 233589 | Differences between
and this patch

Collapse All | Expand All

(-)doc/config/sets.docbook (-21 / +11 lines)
Lines 455-473 Link Here
455
			</para>
455
			</para>
456
			</sect3>
456
			</sect3>
457
		</sect2>
457
		</sect2>
458
		<sect2 id='config-set-classes-InheritSet'>
459
		<title>portage.sets.dbapi.InheritSet</title>
460
		<para>
461
		Package set which contains all packages
462
		that inherit one or more specific eclasses.
463
		This class supports the following options:
464
		<itemizedlist>
465
		<listitem><varname>inherits</varname>: Required. A list of eclass names
466
		which should be used to create the package set.
467
		</listitem>
468
		</itemizedlist>
469
		</para>
470
		</sect2>
471
		<sect2 id='config-set-classes-OwnerSet'>
458
		<sect2 id='config-set-classes-OwnerSet'>
472
		<title>portage.sets.dbapi.OwnerSet</title>
459
		<title>portage.sets.dbapi.OwnerSet</title>
473
		<para>
460
		<para>
Lines 481-500 Link Here
481
		</itemizedlist>
468
		</itemizedlist>
482
		</para>
469
		</para>
483
		</sect2>
470
		</sect2>
484
		<sect2 id='config-set-classes-RestrictSet'>
471
		<sect2 id='config-set-classes-VariableSet'>
485
		<title>portage.sets.dbapi.RestrictSet</title>
472
		<title>portage.sets.dbapi.VariableSet</title>
486
		<para>
473
		<para>
487
		Package set which contains all packages
474
		Package set which contains all packages
488
		that match specified RESTRICT values.
475
		that match specified values of specified variable.
489
		This class supports the following options:
476
		This class supports the following options:
490
		<itemizedlist>
477
		<itemizedlist>
478
		<listitem><varname>variable</varname>: The name of
479
		the specified variable whose values are checked.
480
		</listitem>
491
		<listitem><varname>includes</varname>: A list of
481
		<listitem><varname>includes</varname>: A list of
492
		values that must be contained within the RESTRICT
482
		values that must be contained within the specified
493
		metadata.
483
		variable.
494
		</listitem>
484
		</listitem>
495
		<listitem><varname>excludes</varname>: A list of
485
		<listitem><varname>excludes</varname>: A list of
496
		values that must not be contained within the RESTRICT
486
		values that must not be contained within the specified
497
		metadata.
487
		variable.
498
		</listitem>
488
		</listitem>
499
		</itemizedlist>
489
		</itemizedlist>
500
		</para>
490
		</para>
Lines 545-551 Link Here
545
	<listitem><varname>security</varname>: uses <classname>NewAffectedSet</classname> with default options</listitem>
535
	<listitem><varname>security</varname>: uses <classname>NewAffectedSet</classname> with default options</listitem>
546
	<listitem><varname>everything</varname>: uses <classname>EverythingSet</classname></listitem>
536
	<listitem><varname>everything</varname>: uses <classname>EverythingSet</classname></listitem>
547
	<listitem><varname>preserved-rebuild</varname>: uses <classname>PreservedLibraryConsumerSet</classname></listitem>
537
	<listitem><varname>preserved-rebuild</varname>: uses <classname>PreservedLibraryConsumerSet</classname></listitem>
548
	<listitem><varname>live-rebuild</varname>: uses <classname>InheritSet</classname></listitem>
538
	<listitem><varname>live-rebuild</varname>: uses <classname>VariableSet</classname></listitem>
549
	<listitem><varname>module-rebuild</varname>: uses <classname>OwnerSet</classname></listitem>
539
	<listitem><varname>module-rebuild</varname>: uses <classname>OwnerSet</classname></listitem>
550
	<listitem><varname>downgrade</varname>: uses <classname>DowngradeSet</classname></listitem>
540
	<listitem><varname>downgrade</varname>: uses <classname>DowngradeSet</classname></listitem>
551
	</itemizedlist>
541
	</itemizedlist>
(-)pym/portage/sets/dbapi.py (-57 / +13 lines)
Lines 8-14 Link Here
8
from portage.sets import SetConfigError, get_boolean
8
from portage.sets import SetConfigError, get_boolean
9
9
10
__all__ = ["CategorySet", "DowngradeSet",
10
__all__ = ["CategorySet", "DowngradeSet",
11
	"EverythingSet", "InheritSet", "OwnerSet", "RestrictSet"]
11
	"EverythingSet", "OwnerSet", "VariableSet"]
12
12
13
class EverythingSet(PackageSet):
13
class EverythingSet(PackageSet):
14
	_operations = ["merge", "unmerge"]
14
	_operations = ["merge", "unmerge"]
Lines 89-151 Link Here
89
89
90
	singleBuilder = classmethod(singleBuilder)
90
	singleBuilder = classmethod(singleBuilder)
91
91
92
class InheritSet(PackageSet):
92
class VariableSet(EverythingSet):
93
93
94
	_operations = ["merge", "unmerge"]
94
	_operations = ["merge", "unmerge"]
95
95
96
	description = "Package set which contains all packages " + \
96
	description = "Package set which contains all packages " + \
97
		"that inherit one or more specific eclasses."
97
		"that match specified values of specified variable."
98
98
99
	def __init__(self, portdb=None, vardb=None, inherits=None):
99
	def __init__(self, vardb, portdb=None, variable=None, includes=None, excludes=None):
100
		super(InheritSet, self).__init__()
100
		super(VariableSet, self).__init__(vardb)
101
		self._portdb = portdb
101
		self._portdb = portdb
102
		self._db = vardb
102
		self._variable = variable
103
		self._inherits = inherits
104
105
	def load(self):
106
		atoms = []
107
		inherits = self._inherits
108
		xmatch = self._portdb.xmatch
109
		xmatch_level = "bestmatch-visible"
110
		cp_list = self._db.cp_list
111
		aux_get = self._db.aux_get
112
		portdb_aux_get = self._portdb.aux_get
113
		vardb_keys = ["SLOT"]
114
		portdb_keys = ["INHERITED"]
115
		for cp in self._db.cp_all():
116
			for cpv in cp_list(cp):
117
				slot, = aux_get(cpv, vardb_keys)
118
				slot_atom = "%s:%s" % (cp, slot)
119
				ebuild = xmatch(xmatch_level, slot_atom)
120
				if not ebuild:
121
					continue
122
				inherited, = portdb_aux_get(ebuild, portdb_keys)
123
				if inherits.intersection(inherited.split()):
124
					atoms.append(slot_atom)
125
126
		self._setAtoms(atoms)
127
128
	def singleBuilder(cls, options, settings, trees):
129
		if not "inherits" in options:
130
			raise SetConfigError("no inherits given")
131
132
		inherits = options["inherits"]
133
		return cls(portdb=trees["porttree"].dbapi,
134
			vardb=trees["vartree"].dbapi,
135
			inherits=frozenset(inherits.split()))
136
137
	singleBuilder = classmethod(singleBuilder)
138
139
class RestrictSet(EverythingSet):
140
141
	_operations = ["merge", "unmerge"]
142
143
	description = "Package set which contains all packages " + \
144
		"that match specified RESTRICT values."
145
146
	def __init__(self, vardb, portdb=None, includes=None, excludes=None):
147
		super(RestrictSet, self).__init__(vardb)
148
		self._portdb = portdb
149
		self._includes = includes
103
		self._includes = includes
150
		self._excludes = excludes
104
		self._excludes = excludes
151
105
Lines 153-168 Link Here
153
		ebuild = self._portdb.xmatch("bestmatch-visible", atom)
107
		ebuild = self._portdb.xmatch("bestmatch-visible", atom)
154
		if not ebuild:
108
		if not ebuild:
155
			return False
109
			return False
156
		restrict, = self._portdb.aux_get(ebuild, ["RESTRICT"])
110
		values, = self._portdb.aux_get(ebuild, [self._variable])
157
		restrict = restrict.split()
111
		values = values.split()
158
		if self._includes and not self._includes.intersection(restrict):
112
		if self._includes and not self._includes.intersection(values):
159
			return False
113
			return False
160
		if self._excludes and self._excludes.intersection(restrict):
114
		if self._excludes and self._excludes.intersection(values):
161
			return False
115
			return False
162
		return True
116
		return True
163
117
164
	def singleBuilder(cls, options, settings, trees):
118
	def singleBuilder(cls, options, settings, trees):
165
119
120
		variable = options.get("variable", "")
166
		includes = options.get("includes", "")
121
		includes = options.get("includes", "")
167
		excludes = options.get("excludes", "")
122
		excludes = options.get("excludes", "")
168
123
Lines 172-178 Link Here
172
		return cls(trees["vartree"].dbapi,
127
		return cls(trees["vartree"].dbapi,
173
			portdb=trees["porttree"].dbapi,
128
			portdb=trees["porttree"].dbapi,
174
			excludes=frozenset(excludes.split()),
129
			excludes=frozenset(excludes.split()),
175
			includes=frozenset(includes.split()))
130
			includes=frozenset(includes.split()),
131
			variable=variable)
176
132
177
	singleBuilder = classmethod(singleBuilder)
133
	singleBuilder = classmethod(singleBuilder)
178
134
(-)cnf/sets.conf (-2 / +3 lines)
Lines 47-55 Link Here
47
47
48
# Installed ebuilds that inherit from known live eclasses.
48
# Installed ebuilds that inherit from known live eclasses.
49
[live-rebuild]
49
[live-rebuild]
50
class = portage.sets.dbapi.InheritSet
50
class = portage.sets.dbapi.VariableSet
51
world-candidate = False
51
world-candidate = False
52
inherits = cvs darcs git mercurial subversion
52
variable = RESTRICT
53
includes = constant-sources
53
54
54
# Installed packages that own files inside /lib/modules.
55
# Installed packages that own files inside /lib/modules.
55
[module-rebuild]
56
[module-rebuild]

Return to bug 233589