1 |
commit: dd81609ed029884a17171d42948313d42b3fd5e8 |
2 |
Author: Matt Turner <mattst88 <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sat Apr 2 18:47:14 2022 +0000 |
4 |
Commit: Matt Turner <mattst88 <AT> gentoo <DOT> org> |
5 |
CommitDate: Sat Apr 2 19:14:04 2022 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=dd81609e |
7 |
|
8 |
Eliminate USE aliases |
9 |
|
10 |
These were part of the 4-python and 5-progress EAPIs and were a branch |
11 |
of the code deep enough to warrant its removal in its own patch. |
12 |
|
13 |
Signed-off-by: Matt Turner <mattst88 <AT> gentoo.org> |
14 |
|
15 |
lib/_emerge/Package.py | 39 ++--- |
16 |
lib/_emerge/depgraph.py | 16 +-- |
17 |
lib/_emerge/resolver/slot_collision.py | 8 +- |
18 |
lib/portage/dbapi/__init__.py | 28 ++-- |
19 |
lib/portage/package/ebuild/_config/UseManager.py | 175 ----------------------- |
20 |
lib/portage/tests/resolver/ResolverPlayground.py | 2 - |
21 |
6 files changed, 30 insertions(+), 238 deletions(-) |
22 |
|
23 |
diff --git a/lib/_emerge/Package.py b/lib/_emerge/Package.py |
24 |
index 7c4997aab..db42d836e 100644 |
25 |
--- a/lib/_emerge/Package.py |
26 |
+++ b/lib/_emerge/Package.py |
27 |
@@ -140,9 +140,8 @@ class Package(Task): |
28 |
implicit_match = db._iuse_implicit_cnstr(self.cpv, self._metadata) |
29 |
else: |
30 |
implicit_match = db._repoman_iuse_implicit_cnstr(self.cpv, self._metadata) |
31 |
- usealiases = self.root_config.settings._use_manager.getUseAliases(self) |
32 |
self.iuse = self._iuse( |
33 |
- self, self._metadata["IUSE"].split(), implicit_match, usealiases, self.eapi |
34 |
+ self, self._metadata["IUSE"].split(), implicit_match, self.eapi |
35 |
) |
36 |
|
37 |
if (self.iuse.enabled or self.iuse.disabled) and not eapi_attrs.iuse_defaults: |
38 |
@@ -735,25 +734,19 @@ class Package(Task): |
39 |
"__weakref__", |
40 |
"_iuse_implicit_match", |
41 |
"_pkg", |
42 |
- "alias_mapping", |
43 |
"all", |
44 |
- "all_aliases", |
45 |
"enabled", |
46 |
"disabled", |
47 |
"tokens", |
48 |
) |
49 |
|
50 |
- def __init__(self, pkg, tokens, iuse_implicit_match, aliases, eapi): |
51 |
+ def __init__(self, pkg, tokens, iuse_implicit_match, eapi): |
52 |
self._pkg = pkg |
53 |
self.tokens = tuple(tokens) |
54 |
self._iuse_implicit_match = iuse_implicit_match |
55 |
enabled = [] |
56 |
disabled = [] |
57 |
other = [] |
58 |
- enabled_aliases = [] |
59 |
- disabled_aliases = [] |
60 |
- other_aliases = [] |
61 |
- self.alias_mapping = {} |
62 |
for x in tokens: |
63 |
prefix = x[:1] |
64 |
if prefix == "+": |
65 |
@@ -762,12 +755,9 @@ class Package(Task): |
66 |
disabled.append(x[1:]) |
67 |
else: |
68 |
other.append(x) |
69 |
- self.enabled = frozenset(chain(enabled, enabled_aliases)) |
70 |
- self.disabled = frozenset(chain(disabled, disabled_aliases)) |
71 |
+ self.enabled = frozenset(enabled) |
72 |
+ self.disabled = frozenset(disabled) |
73 |
self.all = frozenset(chain(enabled, disabled, other)) |
74 |
- self.all_aliases = frozenset( |
75 |
- chain(enabled_aliases, disabled_aliases, other_aliases) |
76 |
- ) |
77 |
|
78 |
def is_valid_flag(self, flags): |
79 |
""" |
80 |
@@ -778,11 +768,7 @@ class Package(Task): |
81 |
flags = [flags] |
82 |
|
83 |
for flag in flags: |
84 |
- if ( |
85 |
- not flag in self.all |
86 |
- and not flag in self.all_aliases |
87 |
- and not self._iuse_implicit_match(flag) |
88 |
- ): |
89 |
+ if self.get_flag(flag) is None: |
90 |
return False |
91 |
return True |
92 |
|
93 |
@@ -794,27 +780,18 @@ class Package(Task): |
94 |
flags = [flags] |
95 |
missing_iuse = [] |
96 |
for flag in flags: |
97 |
- if ( |
98 |
- not flag in self.all |
99 |
- and not flag in self.all_aliases |
100 |
- and not self._iuse_implicit_match(flag) |
101 |
- ): |
102 |
+ if self.get_flag(flag) is None: |
103 |
missing_iuse.append(flag) |
104 |
return missing_iuse |
105 |
|
106 |
- def get_real_flag(self, flag): |
107 |
+ def get_flag(self, flag): |
108 |
""" |
109 |
Returns the flag's name within the scope of this package |
110 |
- (accounting for aliases), or None if the flag is unknown. |
111 |
+ or None if the flag is unknown. |
112 |
""" |
113 |
if flag in self.all: |
114 |
return flag |
115 |
|
116 |
- if flag in self.all_aliases: |
117 |
- for k, v in self.alias_mapping.items(): |
118 |
- if flag in v: |
119 |
- return k |
120 |
- |
121 |
if self._iuse_implicit_match(flag): |
122 |
return flag |
123 |
|
124 |
|
125 |
diff --git a/lib/_emerge/depgraph.py b/lib/_emerge/depgraph.py |
126 |
index 14a71a610..c3f872c43 100644 |
127 |
--- a/lib/_emerge/depgraph.py |
128 |
+++ b/lib/_emerge/depgraph.py |
129 |
@@ -7182,21 +7182,21 @@ class depgraph: |
130 |
new_changes = {} |
131 |
|
132 |
for flag, state in target_use.items(): |
133 |
- real_flag = pkg.iuse.get_real_flag(flag) |
134 |
- if real_flag is None: |
135 |
+ flag = pkg.iuse.get_flag(flag) |
136 |
+ if flag is None: |
137 |
# Triggered by use-dep defaults. |
138 |
continue |
139 |
if state: |
140 |
- if real_flag not in old_use: |
141 |
- if new_changes.get(real_flag) == False: |
142 |
+ if flag not in old_use: |
143 |
+ if new_changes.get(flag) == False: |
144 |
return old_use |
145 |
- new_changes[real_flag] = True |
146 |
+ new_changes[flag] = True |
147 |
new_use.add(flag) |
148 |
else: |
149 |
- if real_flag in old_use: |
150 |
- if new_changes.get(real_flag) == True: |
151 |
+ if flag in old_use: |
152 |
+ if new_changes.get(flag) == True: |
153 |
return old_use |
154 |
- new_changes[real_flag] = False |
155 |
+ new_changes[flag] = False |
156 |
new_use |= old_use.difference(target_use) |
157 |
|
158 |
def want_restart_for_use_change(pkg, new_use): |
159 |
|
160 |
diff --git a/lib/_emerge/resolver/slot_collision.py b/lib/_emerge/resolver/slot_collision.py |
161 |
index 4f30cb675..17d6fa395 100644 |
162 |
--- a/lib/_emerge/resolver/slot_collision.py |
163 |
+++ b/lib/_emerge/resolver/slot_collision.py |
164 |
@@ -228,14 +228,14 @@ class slot_conflict_handler: |
165 |
new_change = {} |
166 |
for pkg in solution: |
167 |
for flag, state in solution[pkg].items(): |
168 |
- real_flag = pkg.iuse.get_real_flag(flag) |
169 |
- if real_flag is None: |
170 |
+ flag = pkg.iuse.get_flag(flag) |
171 |
+ if flag is None: |
172 |
# Triggered by use-dep defaults. |
173 |
continue |
174 |
if state == "enabled" and flag not in _pkg_use_enabled(pkg): |
175 |
- new_change.setdefault(pkg, {})[real_flag] = True |
176 |
+ new_change.setdefault(pkg, {})[flag] = True |
177 |
elif state == "disabled" and flag in _pkg_use_enabled(pkg): |
178 |
- new_change.setdefault(pkg, {})[real_flag] = False |
179 |
+ new_change.setdefault(pkg, {})[flag] = False |
180 |
return new_change |
181 |
|
182 |
def _prepare_conflict_msg_and_check_for_specificity(self): |
183 |
|
184 |
diff --git a/lib/portage/dbapi/__init__.py b/lib/portage/dbapi/__init__.py |
185 |
index 717ab95d5..43c3283e8 100644 |
186 |
--- a/lib/portage/dbapi/__init__.py |
187 |
+++ b/lib/portage/dbapi/__init__.py |
188 |
@@ -273,17 +273,15 @@ class dbapi: |
189 |
|
190 |
def _match_use(self, atom, pkg, metadata, ignore_profile=False): |
191 |
iuse_implicit_match = self._iuse_implicit_cnstr(pkg, metadata) |
192 |
- usealiases = self.settings._use_manager.getUseAliases(pkg) |
193 |
iuse = Package._iuse( |
194 |
None, |
195 |
metadata["IUSE"].split(), |
196 |
iuse_implicit_match, |
197 |
- usealiases, |
198 |
metadata["EAPI"], |
199 |
) |
200 |
|
201 |
for x in atom.unevaluated_atom.use.required: |
202 |
- if iuse.get_real_flag(x) is None: |
203 |
+ if iuse.get_flag(x) is None: |
204 |
return False |
205 |
|
206 |
if atom.use is None: |
207 |
@@ -297,18 +295,16 @@ class dbapi: |
208 |
# with implicit IUSE, in order to avoid potential |
209 |
# inconsistencies in USE dep matching (see bug #453400). |
210 |
use = frozenset( |
211 |
- x for x in metadata["USE"].split() if iuse.get_real_flag(x) is not None |
212 |
+ x for x in metadata["USE"].split() if iuse.get_flag(x) is not None |
213 |
) |
214 |
missing_enabled = frozenset( |
215 |
- x for x in atom.use.missing_enabled if iuse.get_real_flag(x) is None |
216 |
+ x for x in atom.use.missing_enabled if iuse.get_flag(x) is None |
217 |
) |
218 |
missing_disabled = frozenset( |
219 |
- x for x in atom.use.missing_disabled if iuse.get_real_flag(x) is None |
220 |
- ) |
221 |
- enabled = frozenset((iuse.get_real_flag(x) or x) for x in atom.use.enabled) |
222 |
- disabled = frozenset( |
223 |
- (iuse.get_real_flag(x) or x) for x in atom.use.disabled |
224 |
+ x for x in atom.use.missing_disabled if iuse.get_flag(x) is None |
225 |
) |
226 |
+ enabled = frozenset((iuse.get_flag(x) or x) for x in atom.use.enabled) |
227 |
+ disabled = frozenset((iuse.get_flag(x) or x) for x in atom.use.disabled) |
228 |
|
229 |
if enabled: |
230 |
if any(x in enabled for x in missing_disabled): |
231 |
@@ -333,7 +329,7 @@ class dbapi: |
232 |
pkg, stable=self.settings._parent_stable |
233 |
) |
234 |
if any( |
235 |
- x in usemask and iuse.get_real_flag(x) is not None |
236 |
+ x in usemask and iuse.get_flag(x) is not None |
237 |
for x in atom.use.enabled |
238 |
): |
239 |
return False |
240 |
@@ -342,9 +338,7 @@ class dbapi: |
241 |
pkg, stable=self.settings._parent_stable |
242 |
) |
243 |
if any( |
244 |
- x in useforce |
245 |
- and x not in usemask |
246 |
- and iuse.get_real_flag(x) is not None |
247 |
+ x in useforce and x not in usemask and iuse.get_flag(x) is not None |
248 |
for x in atom.use.disabled |
249 |
): |
250 |
return False |
251 |
@@ -352,15 +346,13 @@ class dbapi: |
252 |
# Check unsatisfied use-default deps |
253 |
if atom.use.enabled: |
254 |
missing_disabled = frozenset( |
255 |
- x |
256 |
- for x in atom.use.missing_disabled |
257 |
- if iuse.get_real_flag(x) is None |
258 |
+ x for x in atom.use.missing_disabled if iuse.get_flag(x) is None |
259 |
) |
260 |
if any(x in atom.use.enabled for x in missing_disabled): |
261 |
return False |
262 |
if atom.use.disabled: |
263 |
missing_enabled = frozenset( |
264 |
- x for x in atom.use.missing_enabled if iuse.get_real_flag(x) is None |
265 |
+ x for x in atom.use.missing_enabled if iuse.get_flag(x) is None |
266 |
) |
267 |
if any(x in atom.use.disabled for x in missing_enabled): |
268 |
return False |
269 |
|
270 |
diff --git a/lib/portage/package/ebuild/_config/UseManager.py b/lib/portage/package/ebuild/_config/UseManager.py |
271 |
index ea5ba1b42..3827ba27a 100644 |
272 |
--- a/lib/portage/package/ebuild/_config/UseManager.py |
273 |
+++ b/lib/portage/package/ebuild/_config/UseManager.py |
274 |
@@ -6,23 +6,19 @@ __all__ = ("UseManager",) |
275 |
from _emerge.Package import Package |
276 |
from portage import os |
277 |
from portage.dep import ( |
278 |
- Atom, |
279 |
dep_getrepo, |
280 |
dep_getslot, |
281 |
ExtendedAtomDict, |
282 |
remove_slot, |
283 |
_get_useflag_re, |
284 |
- _repo_separator, |
285 |
) |
286 |
from portage.eapi import ( |
287 |
eapi_supports_stable_use_forcing_and_masking, |
288 |
) |
289 |
-from portage.exception import InvalidAtom |
290 |
from portage.localization import _ |
291 |
from portage.repository.config import allow_profile_repo_deps |
292 |
from portage.util import ( |
293 |
grabfile, |
294 |
- grabdict, |
295 |
grabdict_package, |
296 |
read_corresponding_eapi_file, |
297 |
stack_lists, |
298 |
@@ -45,12 +41,10 @@ class UseManager: |
299 |
# use.stable.mask _repo_usestablemask_dict |
300 |
# use.force _repo_useforce_dict |
301 |
# use.stable.force _repo_usestableforce_dict |
302 |
- # use.aliases _repo_usealiases_dict |
303 |
# package.use.mask _repo_pusemask_dict |
304 |
# package.use.stable.mask _repo_pusestablemask_dict |
305 |
# package.use.force _repo_puseforce_dict |
306 |
# package.use.stable.force _repo_pusestableforce_dict |
307 |
- # package.use.aliases _repo_pusealiases_dict |
308 |
# -------------------------------- |
309 |
# profiles |
310 |
# -------------------------------- |
311 |
@@ -157,11 +151,6 @@ class UseManager: |
312 |
"package.use", abs_user_config, user_config |
313 |
) |
314 |
|
315 |
- self._repo_usealiases_dict = self._parse_repository_usealiases(repositories) |
316 |
- self._repo_pusealiases_dict = self._parse_repository_packageusealiases( |
317 |
- repositories |
318 |
- ) |
319 |
- |
320 |
self.repositories = repositories |
321 |
|
322 |
def _parse_file_to_tuple( |
323 |
@@ -408,111 +397,6 @@ class UseManager: |
324 |
for profile in locations |
325 |
) |
326 |
|
327 |
- def _parse_repository_usealiases(self, repositories): |
328 |
- ret = {} |
329 |
- for repo in repositories.repos_with_profiles(): |
330 |
- file_name = os.path.join(repo.location, "profiles", "use.aliases") |
331 |
- eapi = read_corresponding_eapi_file(file_name, default=repo.eapi) |
332 |
- useflag_re = _get_useflag_re(eapi) |
333 |
- raw_file_dict = grabdict(file_name, recursive=True) |
334 |
- file_dict = {} |
335 |
- for real_flag, aliases in raw_file_dict.items(): |
336 |
- if useflag_re.match(real_flag) is None: |
337 |
- writemsg( |
338 |
- _("--- Invalid real USE flag in '%s': '%s'\n") |
339 |
- % (file_name, real_flag), |
340 |
- noiselevel=-1, |
341 |
- ) |
342 |
- else: |
343 |
- for alias in aliases: |
344 |
- if useflag_re.match(alias) is None: |
345 |
- writemsg( |
346 |
- _( |
347 |
- "--- Invalid USE flag alias for '%s' real USE flag in '%s': '%s'\n" |
348 |
- ) |
349 |
- % (real_flag, file_name, alias), |
350 |
- noiselevel=-1, |
351 |
- ) |
352 |
- else: |
353 |
- if any( |
354 |
- alias in v |
355 |
- for k, v in file_dict.items() |
356 |
- if k != real_flag |
357 |
- ): |
358 |
- writemsg( |
359 |
- _("--- Duplicated USE flag alias in '%s': '%s'\n") |
360 |
- % (file_name, alias), |
361 |
- noiselevel=-1, |
362 |
- ) |
363 |
- else: |
364 |
- file_dict.setdefault(real_flag, []).append(alias) |
365 |
- ret[repo.name] = file_dict |
366 |
- return ret |
367 |
- |
368 |
- def _parse_repository_packageusealiases(self, repositories): |
369 |
- ret = {} |
370 |
- for repo in repositories.repos_with_profiles(): |
371 |
- file_name = os.path.join(repo.location, "profiles", "package.use.aliases") |
372 |
- eapi = read_corresponding_eapi_file(file_name, default=repo.eapi) |
373 |
- useflag_re = _get_useflag_re(eapi) |
374 |
- lines = grabfile(file_name, recursive=True) |
375 |
- file_dict = {} |
376 |
- for line in lines: |
377 |
- elements = line.split() |
378 |
- atom = elements[0] |
379 |
- try: |
380 |
- atom = Atom(atom, eapi=eapi) |
381 |
- except InvalidAtom: |
382 |
- writemsg(_("--- Invalid atom in '%s': '%s'\n") % (file_name, atom)) |
383 |
- continue |
384 |
- if len(elements) == 1: |
385 |
- writemsg( |
386 |
- _("--- Missing real USE flag for '%s' in '%s'\n") |
387 |
- % (atom, file_name), |
388 |
- noiselevel=-1, |
389 |
- ) |
390 |
- continue |
391 |
- real_flag = elements[1] |
392 |
- if useflag_re.match(real_flag) is None: |
393 |
- writemsg( |
394 |
- _("--- Invalid real USE flag for '%s' in '%s': '%s'\n") |
395 |
- % (atom, file_name, real_flag), |
396 |
- noiselevel=-1, |
397 |
- ) |
398 |
- else: |
399 |
- for alias in elements[2:]: |
400 |
- if useflag_re.match(alias) is None: |
401 |
- writemsg( |
402 |
- _( |
403 |
- "--- Invalid USE flag alias for '%s' real USE flag for '%s' in '%s': '%s'\n" |
404 |
- ) |
405 |
- % (real_flag, atom, file_name, alias), |
406 |
- noiselevel=-1, |
407 |
- ) |
408 |
- else: |
409 |
- # Duplicated USE flag aliases in entries for different atoms |
410 |
- # matching the same package version are detected in getUseAliases(). |
411 |
- if any( |
412 |
- alias in v |
413 |
- for k, v in file_dict.get(atom.cp, {}) |
414 |
- .get(atom, {}) |
415 |
- .items() |
416 |
- if k != real_flag |
417 |
- ): |
418 |
- writemsg( |
419 |
- _( |
420 |
- "--- Duplicated USE flag alias for '%s' in '%s': '%s'\n" |
421 |
- ) |
422 |
- % (atom, file_name, alias), |
423 |
- noiselevel=-1, |
424 |
- ) |
425 |
- else: |
426 |
- file_dict.setdefault(atom.cp, {}).setdefault( |
427 |
- atom, {} |
428 |
- ).setdefault(real_flag, []).append(alias) |
429 |
- ret[repo.name] = file_dict |
430 |
- return ret |
431 |
- |
432 |
def _isStable(self, pkg): |
433 |
if self._user_config: |
434 |
try: |
435 |
@@ -649,65 +533,6 @@ class UseManager: |
436 |
|
437 |
return frozenset(stack_lists(useforce, incremental=True)) |
438 |
|
439 |
- def getUseAliases(self, pkg): |
440 |
- if hasattr(pkg, "eapi"): |
441 |
- return {} |
442 |
- |
443 |
- cp = getattr(pkg, "cp", None) |
444 |
- if cp is None: |
445 |
- slot = dep_getslot(pkg) |
446 |
- repo = dep_getrepo(pkg) |
447 |
- pkg = _pkg_str(remove_slot(pkg), slot=slot, repo=repo) |
448 |
- cp = pkg.cp |
449 |
- |
450 |
- usealiases = {} |
451 |
- |
452 |
- if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO: |
453 |
- repos = [] |
454 |
- try: |
455 |
- repos.extend(repo.name for repo in self.repositories[pkg.repo].masters) |
456 |
- except KeyError: |
457 |
- pass |
458 |
- repos.append(pkg.repo) |
459 |
- for repo in repos: |
460 |
- usealiases_dict = self._repo_usealiases_dict.get(repo, {}) |
461 |
- for real_flag, aliases in usealiases_dict.items(): |
462 |
- for alias in aliases: |
463 |
- if any( |
464 |
- alias in v for k, v in usealiases.items() if k != real_flag |
465 |
- ): |
466 |
- writemsg( |
467 |
- _("--- Duplicated USE flag alias for '%s%s%s': '%s'\n") |
468 |
- % (pkg.cpv, _repo_separator, pkg.repo, alias), |
469 |
- noiselevel=-1, |
470 |
- ) |
471 |
- else: |
472 |
- usealiases.setdefault(real_flag, []).append(alias) |
473 |
- cp_usealiases_dict = self._repo_pusealiases_dict.get(repo, {}).get(cp) |
474 |
- if cp_usealiases_dict: |
475 |
- usealiases_dict_list = ordered_by_atom_specificity( |
476 |
- cp_usealiases_dict, pkg |
477 |
- ) |
478 |
- for usealiases_dict in usealiases_dict_list: |
479 |
- for real_flag, aliases in usealiases_dict.items(): |
480 |
- for alias in aliases: |
481 |
- if any( |
482 |
- alias in v |
483 |
- for k, v in usealiases.items() |
484 |
- if k != real_flag |
485 |
- ): |
486 |
- writemsg( |
487 |
- _( |
488 |
- "--- Duplicated USE flag alias for '%s%s%s': '%s'\n" |
489 |
- ) |
490 |
- % (pkg.cpv, _repo_separator, pkg.repo, alias), |
491 |
- noiselevel=-1, |
492 |
- ) |
493 |
- else: |
494 |
- usealiases.setdefault(real_flag, []).append(alias) |
495 |
- |
496 |
- return usealiases |
497 |
- |
498 |
def getPUSE(self, pkg): |
499 |
cp = getattr(pkg, "cp", None) |
500 |
if cp is None: |
501 |
|
502 |
diff --git a/lib/portage/tests/resolver/ResolverPlayground.py b/lib/portage/tests/resolver/ResolverPlayground.py |
503 |
index 7852d0aaf..8811354b5 100644 |
504 |
--- a/lib/portage/tests/resolver/ResolverPlayground.py |
505 |
+++ b/lib/portage/tests/resolver/ResolverPlayground.py |
506 |
@@ -63,13 +63,11 @@ class ResolverPlayground: |
507 |
"packages", |
508 |
"package.unmask", |
509 |
"package.use", |
510 |
- "package.use.aliases", |
511 |
"package.use.force", |
512 |
"package.use.mask", |
513 |
"package.use.stable.force", |
514 |
"package.use.stable.mask", |
515 |
"soname.provided", |
516 |
- "use.aliases", |
517 |
"use.force", |
518 |
"use.mask", |
519 |
"layout.conf", |