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 |
|