1 |
Author: zmedico |
2 |
Date: 2008-10-31 21:37:18 +0000 (Fri, 31 Oct 2008) |
3 |
New Revision: 11768 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/portage/__init__.py |
7 |
main/trunk/pym/portage/dbapi/__init__.py |
8 |
Log: |
9 |
Bug #244947 - Add basic repoman support for checking masked and forced flags |
10 |
when verifying USE deps. TODO: Add repoman support in dep_check() for |
11 |
evaluation of conditional USE deps based on forced/masked flags. |
12 |
masked flags, so that repoman can also |
13 |
|
14 |
|
15 |
Modified: main/trunk/pym/portage/__init__.py |
16 |
=================================================================== |
17 |
--- main/trunk/pym/portage/__init__.py 2008-10-31 20:40:51 UTC (rev 11767) |
18 |
+++ main/trunk/pym/portage/__init__.py 2008-10-31 21:37:18 UTC (rev 11768) |
19 |
@@ -2001,45 +2001,13 @@ |
20 |
if defaults != self.configdict["defaults"].get("USE",""): |
21 |
self.configdict["defaults"]["USE"] = defaults |
22 |
has_changed = True |
23 |
- useforce = [] |
24 |
- pos = 0 |
25 |
- for i in xrange(len(self.profiles)): |
26 |
- cpdict = self.puseforce_list[i].get(cp, None) |
27 |
- if cpdict: |
28 |
- keys = cpdict.keys() |
29 |
- while keys: |
30 |
- best_match = best_match_to_list(cpv_slot, keys) |
31 |
- if best_match: |
32 |
- keys.remove(best_match) |
33 |
- useforce.insert(pos, cpdict[best_match]) |
34 |
- else: |
35 |
- break |
36 |
- del keys |
37 |
- if self.useforce_list[i]: |
38 |
- useforce.insert(pos, self.useforce_list[i]) |
39 |
- pos = len(useforce) |
40 |
- useforce = set(stack_lists(useforce, incremental=True)) |
41 |
+ |
42 |
+ useforce = self._getUseForce(cpv_slot) |
43 |
if useforce != self.useforce: |
44 |
self.useforce = useforce |
45 |
has_changed = True |
46 |
- usemask = [] |
47 |
- pos = 0 |
48 |
- for i in xrange(len(self.profiles)): |
49 |
- cpdict = self.pusemask_list[i].get(cp, None) |
50 |
- if cpdict: |
51 |
- keys = cpdict.keys() |
52 |
- while keys: |
53 |
- best_match = best_match_to_list(cpv_slot, keys) |
54 |
- if best_match: |
55 |
- keys.remove(best_match) |
56 |
- usemask.insert(pos, cpdict[best_match]) |
57 |
- else: |
58 |
- break |
59 |
- del keys |
60 |
- if self.usemask_list[i]: |
61 |
- usemask.insert(pos, self.usemask_list[i]) |
62 |
- pos = len(usemask) |
63 |
- usemask = set(stack_lists(usemask, incremental=True)) |
64 |
+ |
65 |
+ usemask = self._getUseMask(cpv_slot) |
66 |
if usemask != self.usemask: |
67 |
self.usemask = usemask |
68 |
has_changed = True |
69 |
@@ -2207,6 +2175,52 @@ |
70 |
iuse_implicit.add("bootstrap") |
71 |
return iuse_implicit |
72 |
|
73 |
+ def _getUseMask(self, pkg): |
74 |
+ cp = getattr(pkg, "cp", None) |
75 |
+ if cp is None: |
76 |
+ cp = dep_getkey(pkg) |
77 |
+ usemask = [] |
78 |
+ pos = 0 |
79 |
+ for i in xrange(len(self.profiles)): |
80 |
+ cpdict = self.pusemask_list[i].get(cp, None) |
81 |
+ if cpdict: |
82 |
+ keys = cpdict.keys() |
83 |
+ while keys: |
84 |
+ best_match = best_match_to_list(pkg, keys) |
85 |
+ if best_match: |
86 |
+ keys.remove(best_match) |
87 |
+ usemask.insert(pos, cpdict[best_match]) |
88 |
+ else: |
89 |
+ break |
90 |
+ del keys |
91 |
+ if self.usemask_list[i]: |
92 |
+ usemask.insert(pos, self.usemask_list[i]) |
93 |
+ pos = len(usemask) |
94 |
+ return set(stack_lists(usemask, incremental=True)) |
95 |
+ |
96 |
+ def _getUseForce(self, pkg): |
97 |
+ cp = getattr(pkg, "cp", None) |
98 |
+ if cp is None: |
99 |
+ cp = dep_getkey(pkg) |
100 |
+ useforce = [] |
101 |
+ pos = 0 |
102 |
+ for i in xrange(len(self.profiles)): |
103 |
+ cpdict = self.puseforce_list[i].get(cp, None) |
104 |
+ if cpdict: |
105 |
+ keys = cpdict.keys() |
106 |
+ while keys: |
107 |
+ best_match = best_match_to_list(pkg, keys) |
108 |
+ if best_match: |
109 |
+ keys.remove(best_match) |
110 |
+ useforce.insert(pos, cpdict[best_match]) |
111 |
+ else: |
112 |
+ break |
113 |
+ del keys |
114 |
+ if self.useforce_list[i]: |
115 |
+ useforce.insert(pos, self.useforce_list[i]) |
116 |
+ pos = len(useforce) |
117 |
+ return set(stack_lists(useforce, incremental=True)) |
118 |
+ |
119 |
def _getMaskAtom(self, cpv, metadata): |
120 |
""" |
121 |
Take a package and return a matching package.mask atom, or None if no |
122 |
|
123 |
Modified: main/trunk/pym/portage/dbapi/__init__.py |
124 |
=================================================================== |
125 |
--- main/trunk/pym/portage/dbapi/__init__.py 2008-10-31 20:40:51 UTC (rev 11767) |
126 |
+++ main/trunk/pym/portage/dbapi/__init__.py 2008-10-31 21:37:18 UTC (rev 11768) |
127 |
@@ -150,7 +150,7 @@ |
128 |
self._iuse_implicit = self.settings._get_implicit_iuse() |
129 |
for cpv in cpv_iter: |
130 |
try: |
131 |
- iuse, use = self.aux_get(cpv, ["IUSE", "USE"]) |
132 |
+ iuse, slot, use = self.aux_get(cpv, ["IUSE", "SLOT", "USE"]) |
133 |
except KeyError: |
134 |
continue |
135 |
use = use.split() |
136 |
@@ -169,6 +169,20 @@ |
137 |
continue |
138 |
if atom.use.disabled.intersection(use): |
139 |
continue |
140 |
+ else: |
141 |
+ # Check masked and forced flags for repoman. |
142 |
+ mysettings = getattr(self, "mysettings", None) |
143 |
+ if mysettings is not None and not mysettings.local_config: |
144 |
+ |
145 |
+ pkg = "%s:%s" % (cpv, slot) |
146 |
+ usemask = mysettings._getUseMask(pkg) |
147 |
+ if usemask.intersection(atom.use.enabled): |
148 |
+ continue |
149 |
+ |
150 |
+ useforce = mysettings._getUseForce(pkg).difference(usemask) |
151 |
+ if useforce.intersection(atom.use.disabled): |
152 |
+ continue |
153 |
+ |
154 |
yield cpv |
155 |
|
156 |
def invalidentry(self, mypath): |