Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r11768 - in main/trunk/pym/portage: . dbapi
Date: Fri, 31 Oct 2008 21:37:22
Message-Id: E1Kw1gF-0008Hy-9n@stork.gentoo.org
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):