Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r10442 - main/branches/2.1.2/bin
Date: Tue, 27 May 2008 04:33:03
Message-Id: E1K0qrr-0001j6-MN@stork.gentoo.org
1 Author: zmedico
2 Date: 2008-05-27 04:32:58 +0000 (Tue, 27 May 2008)
3 New Revision: 10442
4
5 Modified:
6 main/branches/2.1.2/bin/emerge
7 Log:
8 Merge code for the Package.root_config attribute from trunk r10440,
9 excluding USE deps code.
10
11
12 Modified: main/branches/2.1.2/bin/emerge
13 ===================================================================
14 --- main/branches/2.1.2/bin/emerge 2008-05-27 04:10:11 UTC (rev 10441)
15 +++ main/branches/2.1.2/bin/emerge 2008-05-27 04:32:58 UTC (rev 10442)
16 @@ -390,16 +390,18 @@
17 #
18 # public interface
19 #
20 - def __init__(self, settings, trees, spinner, searchdesc,
21 + def __init__(self, root_config, spinner, searchdesc,
22 verbose, usepkg, usepkgonly):
23 """Searches the available and installed packages for the supplied search key.
24 The list of available and installed packages is created at object instantiation.
25 This makes successive searches faster."""
26 - self.settings = settings
27 - self.vartree = trees["vartree"]
28 + self.settings = root_config.settings
29 + self.vartree = root_config.trees["vartree"]
30 self.spinner = spinner
31 self.verbose = verbose
32 self.searchdesc = searchdesc
33 + self.root_config = root_config
34 + self.setconfig = root_config.setconfig
35
36 def fake_portdb():
37 pass
38 @@ -410,9 +412,9 @@
39
40 self._dbs = []
41
42 - portdb = trees["porttree"].dbapi
43 - bindb = trees["bintree"].dbapi
44 - vardb = trees["vartree"].dbapi
45 + portdb = root_config.trees["porttree"].dbapi
46 + bindb = root_config.trees["bintree"].dbapi
47 + vardb = root_config.trees["vartree"].dbapi
48
49 if not usepkgonly and portdb._have_root_eclass_dir:
50 self._dbs.append(portdb)
51 @@ -470,7 +472,7 @@
52 elif built:
53 pkg_type = "binary"
54 return visible(self.settings,
55 - Package(type_name=pkg_type, root=self.settings["ROOT"],
56 + Package(type_name=pkg_type, root_config=self.root_config,
57 cpv=cpv, built=built, installed=installed, metadata=metadata))
58
59 def _xmatch(self, level, atom):
60 @@ -898,7 +900,7 @@
61 in world since system atoms can only match one slot while world atoms can
62 be greedy with respect to slots. Unslotted system packages will not be
63 stored in world."""
64 - pkg = Package(cpv=pkg_key, metadata=metadata)
65 + pkg = Package(cpv=pkg_key, root_config=root_config, metadata=metadata)
66 arg_atom = args_set.findAtomForPackage(pkg)
67 if not arg_atom:
68 return None
69 @@ -1134,11 +1136,14 @@
70 user doesn't necessarily need write access to the vardb in cases where
71 global updates are necessary (updates are performed when necessary if there
72 is not a matching ebuild in the tree)."""
73 - def __init__(self, real_vartree, portdb,
74 - db_keys, pkg_cache, acquire_lock=1):
75 + def __init__(self, root_config, pkg_cache=None, acquire_lock=1):
76 + if pkg_cache is None:
77 + pkg_cache = {}
78 + real_vartree = root_config.trees["vartree"]
79 + portdb = root_config.trees["porttree"].dbapi
80 self.root = real_vartree.root
81 self.settings = real_vartree.settings
82 - mykeys = db_keys[:]
83 + mykeys = list(Package.metadata_keys)
84 for required_key in ("COUNTER", "SLOT"):
85 if required_key not in mykeys:
86 mykeys.append(required_key)
87 @@ -1179,7 +1184,7 @@
88 if pkg is None:
89 pkg = Package(built=True, cpv=cpv,
90 installed=True, metadata=metadata,
91 - root=self.root, type_name="installed")
92 + root_config=root_config, type_name="installed")
93 self._pkg_cache[pkg] = pkg
94 self.dbapi.cpv_inject(pkg)
95 real_dbapi.flush_cache()
96 @@ -1311,7 +1316,7 @@
97 if metadata is None:
98 mreasons = ["corruption"]
99 else:
100 - pkg = Package(type_name=pkg_type, root=root_config.root,
101 + pkg = Package(type_name=pkg_type, root_config=root_config,
102 cpv=cpv, built=built, installed=installed, metadata=metadata)
103 mreasons = get_masking_status(pkg, pkgsettings, root_config)
104 return metadata, mreasons
105 @@ -1401,9 +1406,9 @@
106 class Package(Task):
107 __slots__ = ("built", "cpv", "depth",
108 "installed", "metadata", "onlydeps", "operation",
109 - "root", "type_name",
110 - "category", "cp", "cpv_split",
111 - "pf", "pv_split", "slot", "slot_atom", "use")
112 + "root_config", "type_name",
113 + "category", "cp", "cpv_split", "iuse",
114 + "pf", "pv_split", "root", "slot", "slot_atom", "use")
115
116 metadata_keys = [
117 "CHOST", "COUNTER", "DEPEND", "EAPI", "IUSE", "KEYWORDS",
118 @@ -1412,6 +1417,7 @@
119
120 def __init__(self, **kwargs):
121 Task.__init__(self, **kwargs)
122 + self.root = self.root_config.root
123 self.metadata = self._metadata_wrapper(self, self.metadata)
124 self.cp = portage.cpv_getkey(self.cpv)
125 self.slot_atom = portage_dep.Atom("%s:%s" % (self.cp, self.slot))
126 @@ -1420,13 +1426,39 @@
127 self.pv_split = self.cpv_split[1:]
128
129 class _use(object):
130 +
131 + __slots__ = ("__weakref__", "enabled")
132 +
133 def __init__(self, use):
134 self.enabled = frozenset(use)
135
136 + class _iuse(object):
137 +
138 + __slots__ = ("__weakref__", "all", "enabled", "disabled", "iuse_implicit", "tokens")
139 +
140 + def __init__(self, tokens):
141 + self.tokens = tuple(tokens)
142 + enabled = []
143 + disabled = []
144 + other = []
145 + for x in tokens:
146 + prefix = x[:1]
147 + if prefix == "+":
148 + enabled.append(x[1:])
149 + elif prefix == "-":
150 + disabled.append(x[1:])
151 + else:
152 + other.append(x)
153 + self.enabled = frozenset(enabled)
154 + self.disabled = frozenset(disabled)
155 + self.all = frozenset(chain(enabled, disabled, other))
156 +
157 class _metadata_wrapper(dict):
158 """
159 Detect metadata updates and synchronize Package attributes.
160 """
161 + _wrapped_keys = frozenset(["IUSE", "SLOT", "USE"])
162 +
163 def __init__(self, pkg, metadata):
164 dict.__init__(self)
165 self._pkg = pkg
166 @@ -1440,11 +1472,18 @@
167
168 def __setitem__(self, k, v):
169 dict.__setitem__(self, k, v)
170 - if k == "USE":
171 - self._pkg.use = self._pkg._use(v.split())
172 - elif k == "SLOT":
173 - self._pkg.slot = v
174 + if k in self._wrapped_keys:
175 + getattr(self, "_set_" + k.lower())(k, v)
176
177 + def _set_iuse(self, k, v):
178 + self._pkg.iuse = self._pkg._iuse(v.split())
179 +
180 + def _set_slot(self, k, v):
181 + self._pkg.slot = v
182 +
183 + def _set_use(self, k, v):
184 + self._pkg.use = self._pkg._use(v.split())
185 +
186 def _get_hash_key(self):
187 hash_key = getattr(self, "_hash_key", None)
188 if hash_key is None:
189 @@ -1680,9 +1719,10 @@
190
191 class BlockerDB(object):
192
193 - def __init__(self, vartree, portdb):
194 - self._vartree = vartree
195 - self._portdb = portdb
196 + def __init__(self, root_config):
197 + self._root_config = root_config
198 + self._vartree = root_config.trees["vartree"]
199 + self._portdb = root_config.trees["porttree"].dbapi
200 self._blocker_cache = \
201 BlockerCache(self._vartree.root, vartree.dbapi)
202 self._dep_check_trees = { self._vartree.root : {
203 @@ -1697,9 +1737,7 @@
204 settings = self._vartree.settings
205 stale_cache = set(blocker_cache)
206 fake_vartree = \
207 - FakeVartree(self._vartree,
208 - self._portdb, Package.metadata_keys, {},
209 - acquire_lock=acquire_lock)
210 + FakeVartree(self._root_config, acquire_lock=acquire_lock)
211 vardb = fake_vartree.dbapi
212 installed_pkgs = list(vardb)
213
214 @@ -1975,9 +2013,8 @@
215 for tree in ("porttree", "bintree"):
216 self.trees[myroot][tree] = trees[myroot][tree]
217 self.trees[myroot]["vartree"] = \
218 - FakeVartree(trees[myroot]["vartree"],
219 - trees[myroot]["porttree"].dbapi,
220 - self._mydbapi_keys, self._pkg_cache)
221 + FakeVartree(trees[myroot]["root_config"],
222 + pkg_cache=self._pkg_cache)
223 self.pkgsettings[myroot] = portage.config(
224 clone=self.trees[myroot]["vartree"].settings)
225 self._slot_pkg_map[myroot] = {}
226 @@ -1988,14 +2025,10 @@
227 # have after new packages have been installed.
228 fakedb = PackageVirtualDbapi(vardb.settings)
229 if preload_installed_pkgs:
230 - for cpv in vardb.cpv_all():
231 + for pkg in vardb:
232 self.spinner.update()
233 - metadata = dict(izip(self._mydbapi_keys,
234 - vardb.aux_get(cpv, self._mydbapi_keys)))
235 - pkg = Package(built=True, cpv=cpv,
236 - installed=True, metadata=metadata,
237 - root=myroot, type_name="installed")
238 - self._pkg_cache[pkg] = pkg
239 + # This triggers metadata updates via FakeVartree.
240 + vardb.aux_get(pkg.cpv, [])
241 fakedb.cpv_inject(pkg)
242 self.mydbapi[myroot] = fakedb
243 def graph_tree():
244 @@ -2639,7 +2672,7 @@
245 return 0, myfavorites
246 metadata = dict(izip(self._mydbapi_keys,
247 bindb.aux_get(mykey, self._mydbapi_keys)))
248 - pkg = Package(type_name="binary", root=myroot,
249 + pkg = Package(type_name="binary", root_config=root_config,
250 cpv=mykey, built=True, metadata=metadata,
251 onlydeps=onlydeps)
252 self._pkg_cache[pkg] = pkg
253 @@ -2679,7 +2712,7 @@
254 portdb.aux_get(mykey, self._mydbapi_keys)))
255 pkgsettings.setcpv(mykey, mydb=metadata)
256 metadata["USE"] = pkgsettings["PORTAGE_USE"]
257 - pkg = Package(type_name="ebuild", root=myroot,
258 + pkg = Package(type_name="ebuild", root_config=root_config,
259 cpv=mykey, metadata=metadata, onlydeps=onlydeps)
260 self._pkg_cache[pkg] = pkg
261 args.append(PackageArg(arg=x, package=pkg,
262 @@ -3069,6 +3102,7 @@
263 return ret
264
265 def _select_pkg_highest_available_imp(self, root, atom, onlydeps=False):
266 + root_config = self.roots[root]
267 pkgsettings = self.pkgsettings[root]
268 dbs = self._filtered_trees[root]["dbs"]
269 vardb = self.roots[root].trees["vartree"].dbapi
270 @@ -3154,7 +3188,8 @@
271 continue
272 pkg = Package(built=built, cpv=cpv,
273 installed=installed, metadata=metadata,
274 - onlydeps=onlydeps, root=root, type_name=pkg_type)
275 + onlydeps=onlydeps, root_config=root_config,
276 + type_name=pkg_type)
277 metadata = pkg.metadata
278 if not built and ("?" in metadata["LICENSE"] or \
279 "?" in metadata["PROVIDE"]):
280 @@ -3680,7 +3715,8 @@
281 uninst_task = Package(built=inst_pkg.built,
282 cpv=inst_pkg.cpv, installed=inst_pkg.installed,
283 metadata=inst_pkg.metadata,
284 - operation="uninstall", root=inst_pkg.root,
285 + operation="uninstall",
286 + root_config=inst_pkg.root_config,
287 type_name=inst_pkg.type_name)
288 self._pkg_cache[uninst_task] = uninst_task
289 # Enforce correct merge order with a hard dep.
290 @@ -5300,9 +5336,10 @@
291 raise portage_exception.PackageNotFound(pkg_key)
292 installed = action == "uninstall"
293 built = pkg_type != "ebuild"
294 + root_config = self.roots[myroot]
295 pkg = Package(built=built, cpv=pkg_key,
296 installed=installed, metadata=metadata,
297 - operation=action, root=myroot,
298 + operation=action, root_config=root_config,
299 type_name=pkg_type)
300 if pkg_type == "ebuild":
301 pkgsettings = self.pkgsettings[myroot]
302 @@ -5743,9 +5780,7 @@
303 for root in trees:
304 self.pkgsettings[root] = portage.config(
305 clone=trees[root]["vartree"].settings)
306 - self._blocker_db[root] = BlockerDB(
307 - trees[root]["vartree"],
308 - trees[root]["porttree"].dbapi)
309 + self._blocker_db[root] = BlockerDB(trees[root]["root_config"])
310 self.curval = 0
311 self._spawned_pids = []
312
313 @@ -7677,11 +7712,11 @@
314 mydbapi=trees[settings["ROOT"]]["vartree"].dbapi,
315 tree="vartree")
316
317 -def action_search(settings, trees, myopts, myfiles, spinner):
318 +def action_search(root_config, myopts, myfiles, spinner):
319 if not myfiles:
320 print "emerge: no search terms provided."
321 else:
322 - searchinstance = search(settings, trees,
323 + searchinstance = search(root_config,
324 spinner, "--searchdesc" in myopts,
325 "--quiet" not in myopts, "--usepkg" in myopts,
326 "--usepkgonly" in myopts)
327 @@ -7735,9 +7770,7 @@
328 dep_check_trees = {}
329 dep_check_trees[myroot] = {}
330 dep_check_trees[myroot]["vartree"] = \
331 - FakeVartree(trees[myroot]["vartree"],
332 - trees[myroot]["porttree"].dbapi,
333 - depgraph._mydbapi_keys, pkg_cache)
334 + FakeVartree(trees[myroot]["root_config"], pkg_cache=pkg_cache)
335 vardb = dep_check_trees[myroot]["vartree"].dbapi
336 # Constrain dependency selection to the installed packages.
337 dep_check_trees[myroot]["porttree"] = dep_check_trees[myroot]["vartree"]
338 @@ -9003,7 +9036,7 @@
339 # SEARCH action
340 elif "search"==myaction:
341 validate_ebuild_environment(trees)
342 - action_search(settings, trees[settings["ROOT"]],
343 + action_search(trees[settings["ROOT"]]["root_config"],
344 myopts, myfiles, spinner)
345 elif myaction in ("clean", "unmerge") or \
346 (myaction == "prune" and "--nodeps" in myopts):
347
348 --
349 gentoo-commits@l.g.o mailing list