Gentoo Archives: gentoo-commits

From: Sebastian Luther <SebastianLuther@×××.de>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: pym/_emerge/resolver/, pym/_emerge/
Date: Wed, 05 Feb 2014 19:42:14
Message-Id: 1391629161.33b3818c1d74971253e9a9ddbb1047a34afec44c.few@gentoo
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: