Gentoo Archives: gentoo-portage-dev

From: Sebastian Luther <SebastianLuther@×××.de>
To: gentoo-portage-dev@l.g.o
Subject: [gentoo-portage-dev] [PATCH 05/10] Replace _slot_collision_nodes with _package_tracker
Date: Wed, 29 Jan 2014 15:34:16
Message-Id: 1391009594-22750-6-git-send-email-SebastianLuther@gmx.de
In Reply to: [gentoo-portage-dev] [PATCH 00/10] First steps to get rid of backtracking by Sebastian Luther
1 ---
2 pym/_emerge/depgraph.py | 16 +++++++---------
3 1 file changed, 7 insertions(+), 9 deletions(-)
4
5 diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
6 index 484ac14..1bb086b 100644
7 --- a/pym/_emerge/depgraph.py
8 +++ b/pym/_emerge/depgraph.py
9 @@ -378,9 +378,6 @@ class _dynamic_depgraph_config(object):
10 # This use used to check if we have accounted for blockers
11 # relevant to a package.
12 self._traversed_pkg_deps = set()
13 - # Slot collision nodes are not allowed to block other packages since
14 - # blocker validation is only able to account for one package per slot.
15 - self._slot_collision_nodes = set()
16 self._parent_atoms = {}
17 self._slot_conflict_handler = None
18 self._circular_dependency_handler = None
19 @@ -1799,11 +1796,16 @@ class depgraph(object):
20 buildpkgonly = "--buildpkgonly" in self._frozen_config.myopts
21 nodeps = "--nodeps" in self._frozen_config.myopts
22 if dep.blocker:
23 +
24 + # Slot collision nodes are not allowed to block other packages since
25 + # blocker validation is only able to account for one package per slot.
26 + is_slot_conflict_parent = any(dep.parent in conflict.pkgs[1:] for conflict in \
27 + self._dynamic_config._package_tracker.slot_conflicts())
28 if not buildpkgonly and \
29 not nodeps and \
30 not dep.collapsed_priority.ignored and \
31 not dep.collapsed_priority.optional and \
32 - dep.parent not in self._dynamic_config._slot_collision_nodes:
33 + not is_slot_conflict_parent:
34 if dep.parent.onlydeps:
35 # It's safe to ignore blockers if the
36 # parent is an --onlydeps node.
37 @@ -2019,7 +2021,6 @@ class depgraph(object):
38 level=logging.DEBUG, noiselevel=-1)
39
40 else:
41 - self._add_slot_conflict(pkg)
42 if debug:
43 writemsg_level(
44 "%s%s %s\n" % ("Slot Conflict:".ljust(15),
45 @@ -2138,9 +2139,6 @@ class depgraph(object):
46 self._dynamic_config._slot_operator_deps[slot_key] = slot_info
47 slot_info.append(dep)
48
49 - def _add_slot_conflict(self, pkg):
50 - self._dynamic_config._slot_collision_nodes.add(pkg)
51 -
52 def _add_pkg_deps(self, pkg, allow_unsatisfied=False):
53
54 myroot = pkg.root
55 @@ -6019,7 +6017,7 @@ class depgraph(object):
56
57 if "complete" not in self._dynamic_config.myparams and \
58 self._dynamic_config._allow_backtracking and \
59 - self._dynamic_config._slot_collision_nodes and \
60 + any(self._dynamic_config._package_tracker.slot_conflicts()) and \
61 not self._accept_blocker_conflicts():
62 self._dynamic_config.myparams["complete"] = True
63
64 --
65 1.8.3.2