1 |
Author: zmedico |
2 |
Date: 2009-06-25 01:53:58 +0000 (Thu, 25 Jun 2009) |
3 |
New Revision: 13688 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/_emerge/depgraph.py |
7 |
Log: |
8 |
Use depgraph._pkg() to construct Package instances inside |
9 |
_select_pkg_highest_available_imp(). |
10 |
|
11 |
|
12 |
Modified: main/trunk/pym/_emerge/depgraph.py |
13 |
=================================================================== |
14 |
--- main/trunk/pym/_emerge/depgraph.py 2009-06-25 00:45:05 UTC (rev 13687) |
15 |
+++ main/trunk/pym/_emerge/depgraph.py 2009-06-25 01:53:58 UTC (rev 13688) |
16 |
@@ -1875,9 +1875,7 @@ |
17 |
|
18 |
if not cpv_list: |
19 |
continue |
20 |
- pkg_status = "merge" |
21 |
- if installed or onlydeps: |
22 |
- pkg_status = "nomerge" |
23 |
+ |
24 |
# descending order |
25 |
cpv_list.reverse() |
26 |
for cpv in cpv_list: |
27 |
@@ -1889,18 +1887,11 @@ |
28 |
# in case there is a visible downgrade. |
29 |
continue |
30 |
reinstall_for_flags = None |
31 |
- cache_key = (pkg_type, root, cpv, pkg_status) |
32 |
- pkg = self._pkg_cache.get(cache_key) |
33 |
- if pkg is None: |
34 |
- try: |
35 |
- metadata = izip(db_keys, db.aux_get(cpv, db_keys)) |
36 |
- except KeyError: |
37 |
- continue |
38 |
- pkg = Package(built=built, cpv=cpv, |
39 |
- installed=installed, metadata=metadata, |
40 |
- onlydeps=onlydeps, root_config=root_config, |
41 |
- type_name=pkg_type) |
42 |
- self._pkg_cache[pkg] = pkg |
43 |
+ try: |
44 |
+ pkg = self._pkg(cpv, pkg_type, root_config, |
45 |
+ installed=installed, onlydeps=onlydeps) |
46 |
+ except portage.exception.PackageNotFound: |
47 |
+ continue |
48 |
|
49 |
if not installed or (built and matched_packages): |
50 |
# Only enforce visibility on installed packages |
51 |
@@ -2194,18 +2185,24 @@ |
52 |
return 0 |
53 |
return 1 |
54 |
|
55 |
- def _pkg(self, cpv, type_name, root_config, installed=False): |
56 |
+ def _pkg(self, cpv, type_name, root_config, installed=False, |
57 |
+ onlydeps=False): |
58 |
""" |
59 |
Get a package instance from the cache, or create a new |
60 |
- one if necessary. Raises KeyError from aux_get if it |
61 |
+ one if necessary. Raises PackageNotFound from aux_get if it |
62 |
failures for some reason (package does not exist or is |
63 |
corrupt). |
64 |
""" |
65 |
operation = "merge" |
66 |
- if installed: |
67 |
+ if installed or onlydeps: |
68 |
operation = "nomerge" |
69 |
pkg = self._pkg_cache.get( |
70 |
(type_name, root_config.root, cpv, operation)) |
71 |
+ if pkg is None and onlydeps and not installed: |
72 |
+ # Maybe it already got pulled in as a "merge" node. |
73 |
+ pkg = self.mydbapi[root_config.root].get( |
74 |
+ (type_name, root_config.root, cpv, 'merge')) |
75 |
+ |
76 |
if pkg is None: |
77 |
tree_type = self.pkg_tree_map[type_name] |
78 |
db = root_config.trees[tree_type].dbapi |
79 |
@@ -2216,8 +2213,8 @@ |
80 |
except KeyError: |
81 |
raise portage.exception.PackageNotFound(cpv) |
82 |
pkg = Package(built=(type_name != "ebuild"), cpv=cpv, |
83 |
- metadata=metadata, |
84 |
- root_config=root_config, installed=installed) |
85 |
+ installed=installed, metadata=metadata, |
86 |
+ root_config=root_config, type_name=type_name) |
87 |
self._pkg_cache[pkg] = pkg |
88 |
return pkg |