1 |
commit: c8530deda6b85dad1f7557d490f8a200e8bfa54e |
2 |
Author: Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache <DOT> Org> |
3 |
AuthorDate: Fri Jun 7 20:41:28 2013 +0000 |
4 |
Commit: Arfrever Frehtes Taifersar Arahesis <arfrever.fta <AT> gmail <DOT> com> |
5 |
CommitDate: Fri Jun 7 20:41:28 2013 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=c8530ded |
7 |
|
8 |
portage.dbapi.dbapi._match_use(): Use _emerge.Package.Package._iuse.get_real_flag(). |
9 |
|
10 |
It fixes support for USE aliases in: |
11 |
best_version |
12 |
has_version |
13 |
emerge --keep-going |
14 |
emerge --resume |
15 |
|
16 |
--- |
17 |
pym/portage/dbapi/__init__.py | 40 +++++++++++++++++----------------------- |
18 |
1 file changed, 17 insertions(+), 23 deletions(-) |
19 |
|
20 |
diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py |
21 |
index ab4306d..f954bad 100644 |
22 |
--- a/pym/portage/dbapi/__init__.py |
23 |
+++ b/pym/portage/dbapi/__init__.py |
24 |
@@ -204,10 +204,11 @@ class dbapi(object): |
25 |
iuse_implicit_match = self.settings._iuse_effective_match |
26 |
else: |
27 |
iuse_implicit_match = self.settings._iuse_implicit_match |
28 |
- iuse = frozenset(x.lstrip('+-') for x in metadata["IUSE"].split()) |
29 |
+ usealiases = self.settings._use_manager.getUseAliases(self._pkg_str(cpv, metadata["repository"])) |
30 |
+ iuse = Package._iuse(None, metadata["IUSE"].split(), iuse_implicit_match, usealiases, metadata["EAPI"]) |
31 |
|
32 |
for x in atom.unevaluated_atom.use.required: |
33 |
- if x not in iuse and not iuse_implicit_match(x): |
34 |
+ if iuse.get_real_flag(x) is None: |
35 |
return False |
36 |
|
37 |
if atom.use is None: |
38 |
@@ -220,27 +221,24 @@ class dbapi(object): |
39 |
# data corruption). The enabled flags must be consistent |
40 |
# with implicit IUSE, in order to avoid potential |
41 |
# inconsistencies in USE dep matching (see bug #453400). |
42 |
- use = frozenset(x for x in metadata["USE"].split() |
43 |
- if x in iuse or iuse_implicit_match(x)) |
44 |
- missing_enabled = frozenset(x for x in |
45 |
- atom.use.missing_enabled if not |
46 |
- (x in iuse or iuse_implicit_match(x))) |
47 |
- missing_disabled = frozenset(x for x in |
48 |
- atom.use.missing_disabled if not |
49 |
- (x in iuse or iuse_implicit_match(x))) |
50 |
- |
51 |
- if atom.use.enabled: |
52 |
- if any(x in atom.use.enabled for x in missing_disabled): |
53 |
+ use = frozenset(x for x in metadata["USE"].split() if iuse.get_real_flag(x) is not None) |
54 |
+ missing_enabled = frozenset(x for x in atom.use.missing_enabled if iuse.get_real_flag(x) is None) |
55 |
+ missing_disabled = frozenset(x for x in atom.use.missing_disabled if iuse.get_real_flag(x) is None) |
56 |
+ enabled = frozenset((iuse.get_real_flag(x) or x) for x in atom.use.enabled) |
57 |
+ disabled = frozenset((iuse.get_real_flag(x) or x) for x in atom.use.disabled) |
58 |
+ |
59 |
+ if enabled: |
60 |
+ if any(x in enabled for x in missing_disabled): |
61 |
return False |
62 |
- need_enabled = atom.use.enabled.difference(use) |
63 |
+ need_enabled = enabled.difference(use) |
64 |
if need_enabled: |
65 |
if any(x not in missing_enabled for x in need_enabled): |
66 |
return False |
67 |
|
68 |
- if atom.use.disabled: |
69 |
- if any(x in atom.use.disabled for x in missing_enabled): |
70 |
+ if disabled: |
71 |
+ if any(x in disabled for x in missing_enabled): |
72 |
return False |
73 |
- need_disabled = atom.use.disabled.intersection(use) |
74 |
+ need_disabled = disabled.intersection(use) |
75 |
if need_disabled: |
76 |
if any(x not in missing_disabled for x in need_disabled): |
77 |
return False |
78 |
@@ -266,15 +264,11 @@ class dbapi(object): |
79 |
|
80 |
# Check unsatisfied use-default deps |
81 |
if atom.use.enabled: |
82 |
- missing_disabled = frozenset(x for x in |
83 |
- atom.use.missing_disabled if not |
84 |
- (x in iuse or iuse_implicit_match(x))) |
85 |
+ missing_disabled = frozenset(x for x in atom.use.missing_disabled if iuse.get_real_flag(x) is None) |
86 |
if any(x in atom.use.enabled for x in missing_disabled): |
87 |
return False |
88 |
if atom.use.disabled: |
89 |
- missing_enabled = frozenset(x for x in |
90 |
- atom.use.missing_enabled if not |
91 |
- (x in iuse or iuse_implicit_match(x))) |
92 |
+ missing_enabled = frozenset(x for x in atom.use.missing_enabled if iuse.get_real_flag(x) is None) |
93 |
if any(x in atom.use.disabled for x in missing_enabled): |
94 |
return False |