1 |
commit: 33b3818c1d74971253e9a9ddbb1047a34afec44c |
2 |
Author: Sebastian Luther <SebastianLuther <AT> gmx <DOT> de> |
3 |
AuthorDate: Wed Jan 22 17:20:19 2014 +0000 |
4 |
Commit: Sebastian Luther <SebastianLuther <AT> gmx <DOT> de > |
5 |
CommitDate: Wed Feb 5 19:39:21 2014 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=33b3818c |
7 |
|
8 |
Replace _slot_pkg_map and some tree dbapiS with _package_tracker |
9 |
|
10 |
--- |
11 |
pym/_emerge/depgraph.py | 48 ++++++++++++++++++++-------------- |
12 |
pym/_emerge/resolver/output_helpers.py | 7 ++--- |
13 |
2 files changed, 32 insertions(+), 23 deletions(-) |
14 |
|
15 |
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py |
16 |
index 83035c2..fd59dda 100644 |
17 |
--- a/pym/_emerge/depgraph.py |
18 |
+++ b/pym/_emerge/depgraph.py |
19 |
@@ -75,6 +75,7 @@ from _emerge.UseFlagDisplay import pkg_use_display |
20 |
from _emerge.userquery import userquery |
21 |
|
22 |
from _emerge.resolver.backtracking import Backtracker, BacktrackParameter |
23 |
+from _emerge.resolver.package_tracker import PackageTracker, PackageTrackerDbapiWrapper |
24 |
from _emerge.resolver.slot_collision import slot_conflict_handler |
25 |
from _emerge.resolver.circular_dependency import circular_dependency_handler |
26 |
from _emerge.resolver.output import Display |
27 |
@@ -341,8 +342,6 @@ class _dynamic_depgraph_config(object): |
28 |
self.myparams = myparams.copy() |
29 |
self._vdb_loaded = False |
30 |
self._allow_backtracking = allow_backtracking |
31 |
- # Maps slot atom to package for each Package added to the graph. |
32 |
- self._slot_pkg_map = {} |
33 |
# Maps nodes to the reasons they were selected for reinstallation. |
34 |
self._reinstall_nodes = {} |
35 |
self.mydbapi = {} |
36 |
@@ -432,14 +431,14 @@ class _dynamic_depgraph_config(object): |
37 |
self._traverse_ignored_deps = False |
38 |
self._complete_mode = False |
39 |
self._slot_operator_deps = {} |
40 |
+ self._package_tracker = PackageTracker() |
41 |
|
42 |
for myroot in depgraph._frozen_config.trees: |
43 |
self.sets[myroot] = _depgraph_sets() |
44 |
- self._slot_pkg_map[myroot] = {} |
45 |
vardb = depgraph._frozen_config.trees[myroot]["vartree"].dbapi |
46 |
# This dbapi instance will model the state that the vdb will |
47 |
# have after new packages have been installed. |
48 |
- fakedb = PackageVirtualDbapi(vardb.settings) |
49 |
+ fakedb = PackageTrackerDbapiWrapper(myroot, self._package_tracker) |
50 |
|
51 |
self.mydbapi[myroot] = fakedb |
52 |
def graph_tree(): |
53 |
@@ -564,12 +563,12 @@ class depgraph(object): |
54 |
|
55 |
if not dynamic_deps: |
56 |
for pkg in vardb: |
57 |
- fakedb.cpv_inject(pkg) |
58 |
+ self._dynamic_config._package_tracker.add_installed_pkg(pkg) |
59 |
else: |
60 |
max_jobs = self._frozen_config.myopts.get("--jobs") |
61 |
max_load = self._frozen_config.myopts.get("--load-average") |
62 |
scheduler = TaskScheduler( |
63 |
- self._dynamic_deps_preload(fake_vartree, fakedb), |
64 |
+ self._dynamic_deps_preload(fake_vartree), |
65 |
max_jobs=max_jobs, |
66 |
max_load=max_load, |
67 |
event_loop=fake_vartree._portdb._event_loop) |
68 |
@@ -578,11 +577,11 @@ class depgraph(object): |
69 |
|
70 |
self._dynamic_config._vdb_loaded = True |
71 |
|
72 |
- def _dynamic_deps_preload(self, fake_vartree, fakedb): |
73 |
+ def _dynamic_deps_preload(self, fake_vartree): |
74 |
portdb = fake_vartree._portdb |
75 |
for pkg in fake_vartree.dbapi: |
76 |
self._spinner_update() |
77 |
- fakedb.cpv_inject(pkg) |
78 |
+ self._dynamic_config._package_tracker.add_installed_pkg(pkg) |
79 |
ebuild_path, repo_path = \ |
80 |
portdb.findname2(pkg.cpv, myrepo=pkg.repo) |
81 |
if ebuild_path is None: |
82 |
@@ -1050,7 +1049,8 @@ class depgraph(object): |
83 |
all_parents, conflict_pkgs): |
84 |
|
85 |
debug = "--debug" in self._frozen_config.myopts |
86 |
- existing_node = self._dynamic_config._slot_pkg_map[root][slot_atom] |
87 |
+ existing_node = next(self._dynamic_config._package_tracker.match( |
88 |
+ root, slot_atom, installed=False)) |
89 |
# In order to avoid a missed update, first mask lower versions |
90 |
# that conflict with higher versions (the backtracker visits |
91 |
# these in reverse order). |
92 |
@@ -1827,8 +1827,8 @@ class depgraph(object): |
93 |
# The caller has selected a specific package |
94 |
# via self._minimize_packages(). |
95 |
dep_pkg = dep.child |
96 |
- existing_node = self._dynamic_config._slot_pkg_map[ |
97 |
- dep.root].get(dep_pkg.slot_atom) |
98 |
+ existing_node = next(self._dynamic_config._package_tracker.match( |
99 |
+ dep.root, dep_pkg.slot_atom, installed=False), None) |
100 |
|
101 |
if not dep_pkg: |
102 |
if (dep.collapsed_priority.optional or |
103 |
@@ -1893,7 +1893,9 @@ class depgraph(object): |
104 |
return 1 |
105 |
|
106 |
def _check_slot_conflict(self, pkg, atom): |
107 |
- existing_node = self._dynamic_config._slot_pkg_map[pkg.root].get(pkg.slot_atom) |
108 |
+ existing_node = next(self._dynamic_config._package_tracker.match( |
109 |
+ pkg.root, pkg.slot_atom, installed=False), None) |
110 |
+ |
111 |
matches = None |
112 |
if existing_node: |
113 |
matches = pkg.cpv == existing_node.cpv |
114 |
@@ -2046,7 +2048,7 @@ class depgraph(object): |
115 |
# function despite collisions. |
116 |
pass |
117 |
elif not previously_added: |
118 |
- self._dynamic_config._slot_pkg_map[pkg.root][pkg.slot_atom] = pkg |
119 |
+ self._dynamic_config._package_tracker.add_pkg(pkg) |
120 |
self._dynamic_config.mydbapi[pkg.root].cpv_inject(pkg) |
121 |
self._dynamic_config._filtered_trees[pkg.root]["porttree"].dbapi._clear_cache() |
122 |
self._dynamic_config._highest_pkg_cache.clear() |
123 |
@@ -2162,7 +2164,8 @@ class depgraph(object): |
124 |
slot_nodes = self._dynamic_config._slot_collision_info.get(slot_key) |
125 |
if slot_nodes is None: |
126 |
slot_nodes = set() |
127 |
- slot_nodes.add(self._dynamic_config._slot_pkg_map[pkg.root][pkg.slot_atom]) |
128 |
+ slot_nodes.update(self._dynamic_config._package_tracker.match( |
129 |
+ pkg.root, pkg.slot_atom, installed=False)) |
130 |
self._dynamic_config._slot_collision_info[slot_key] = slot_nodes |
131 |
slot_nodes.add(pkg) |
132 |
|
133 |
@@ -2347,8 +2350,8 @@ class depgraph(object): |
134 |
mypriority.satisfied.visible and \ |
135 |
dep.child is not None and \ |
136 |
not dep.child.installed and \ |
137 |
- self._dynamic_config._slot_pkg_map[dep.child.root].get( |
138 |
- dep.child.slot_atom) is None and \ |
139 |
+ not any(self._dynamic_config._package_tracker.match( |
140 |
+ dep.child.root, dep.child.slot_atom, installed=False)) and \ |
141 |
not slot_operator_rebuild |
142 |
|
143 |
def _wrapped_add_pkg_dep_string(self, pkg, dep_root, dep_priority, |
144 |
@@ -5071,7 +5074,9 @@ class depgraph(object): |
145 |
# will always end with a break statement below |
146 |
# this point. |
147 |
if find_existing_node: |
148 |
- e_pkg = self._dynamic_config._slot_pkg_map[root].get(pkg.slot_atom) |
149 |
+ e_pkg = next(self._dynamic_config._package_tracker.match( |
150 |
+ root, pkg.slot_atom, installed=False), None) |
151 |
+ |
152 |
if not e_pkg: |
153 |
break |
154 |
|
155 |
@@ -5319,7 +5324,9 @@ class depgraph(object): |
156 |
matches = unmasked |
157 |
|
158 |
pkg = matches[-1] # highest match |
159 |
- in_graph = self._dynamic_config._slot_pkg_map[root].get(pkg.slot_atom) |
160 |
+ in_graph = next(self._dynamic_config._package_tracker.match( |
161 |
+ root, pkg.slot_atom, installed=False), None) |
162 |
+ |
163 |
return pkg, in_graph |
164 |
|
165 |
def _complete_graph(self, required_sets=None): |
166 |
@@ -7988,8 +7995,9 @@ class _dep_check_composite_db(dbapi): |
167 |
elif not self._depgraph._equiv_ebuild_visible(pkg): |
168 |
return False |
169 |
|
170 |
- in_graph = self._depgraph._dynamic_config._slot_pkg_map[ |
171 |
- self._root].get(pkg.slot_atom) |
172 |
+ in_graph = next(self._depgraph._dynamic_config._package_tracker.match( |
173 |
+ self._root, pkg.slot_atom, installed=False), None) |
174 |
+ |
175 |
if in_graph is None: |
176 |
# Mask choices for packages which are not the highest visible |
177 |
# version within their slot (since they usually trigger slot |
178 |
|
179 |
diff --git a/pym/_emerge/resolver/output_helpers.py b/pym/_emerge/resolver/output_helpers.py |
180 |
index cfa6910..58b2694 100644 |
181 |
--- a/pym/_emerge/resolver/output_helpers.py |
182 |
+++ b/pym/_emerge/resolver/output_helpers.py |
183 |
@@ -227,7 +227,7 @@ class _DisplayConfig(object): |
184 |
self.reinstall_nodes = dynamic_config._reinstall_nodes |
185 |
self.digraph = dynamic_config.digraph |
186 |
self.blocker_uninstalls = dynamic_config._blocker_uninstalls |
187 |
- self.slot_pkg_map = dynamic_config._slot_pkg_map |
188 |
+ self.package_tracker = dynamic_config._package_tracker |
189 |
self.set_nodes = dynamic_config._set_nodes |
190 |
|
191 |
self.pkg_use_enabled = depgraph._pkg_use_enabled |
192 |
@@ -370,8 +370,9 @@ def _tree_display(conf, mylist): |
193 |
# If the uninstall task did not need to be executed because |
194 |
# of an upgrade, display Blocker -> Upgrade edges since the |
195 |
# corresponding Blocker -> Uninstall edges will not be shown. |
196 |
- upgrade_node = \ |
197 |
- conf.slot_pkg_map[uninstall.root].get(uninstall.slot_atom) |
198 |
+ upgrade_node = next(conf.package_tracker.match( |
199 |
+ uninstall.root, uninstall.slot_atom), None) |
200 |
+ |
201 |
if upgrade_node is not None and \ |
202 |
uninstall not in executed_uninstalls: |
203 |
for blocker in uninstall_parents: |