1 |
Author: zmedico |
2 |
Date: 2008-12-01 19:02:33 +0000 (Mon, 01 Dec 2008) |
3 |
New Revision: 12127 |
4 |
|
5 |
Modified: |
6 |
main/branches/2.1.6/pym/_emerge/__init__.py |
7 |
Log: |
8 |
Change depgraph._slot_collision_info() from a set to a dict that contains |
9 |
sets of packages pulled into a given slot. This will make the data easier |
10 |
to analyze when implementing a fix for bug #249185. (trunk r12124) |
11 |
|
12 |
|
13 |
Modified: main/branches/2.1.6/pym/_emerge/__init__.py |
14 |
=================================================================== |
15 |
--- main/branches/2.1.6/pym/_emerge/__init__.py 2008-12-01 18:59:49 UTC (rev 12126) |
16 |
+++ main/branches/2.1.6/pym/_emerge/__init__.py 2008-12-01 19:02:33 UTC (rev 12127) |
17 |
@@ -4303,7 +4303,7 @@ |
18 |
self._irrelevant_blockers = digraph() |
19 |
# Contains only unsolvable Package -> Blocker edges |
20 |
self._unsolvable_blockers = digraph() |
21 |
- self._slot_collision_info = set() |
22 |
+ self._slot_collision_info = {} |
23 |
# Slot collision nodes are not allowed to block other packages since |
24 |
# blocker validation is only able to account for one package per slot. |
25 |
self._slot_collision_nodes = set() |
26 |
@@ -4345,14 +4345,11 @@ |
27 |
indent = " " |
28 |
# Max number of parents shown, to avoid flooding the display. |
29 |
max_parents = 3 |
30 |
- for slot_atom, root in self._slot_collision_info: |
31 |
+ for (slot_atom, root), slot_nodes \ |
32 |
+ in self._slot_collision_info.iteritems(): |
33 |
msg.append(str(slot_atom)) |
34 |
msg.append("\n\n") |
35 |
- slot_nodes = [] |
36 |
- for node in self._slot_collision_nodes: |
37 |
- if node.slot_atom == slot_atom: |
38 |
- slot_nodes.append(node) |
39 |
- slot_nodes.append(self._slot_pkg_map[root][slot_atom]) |
40 |
+ |
41 |
for node in slot_nodes: |
42 |
msg.append(indent) |
43 |
msg.append(str(node)) |
44 |
@@ -4612,8 +4609,7 @@ |
45 |
# as an unsatisfied dependency. |
46 |
self._unsatisfied_deps_for_display.append( |
47 |
((dep.root, dep.atom), {"myparent":dep.parent})) |
48 |
- self._slot_collision_info.add((pkg.slot_atom, pkg.root)) |
49 |
- self._slot_collision_nodes.add(pkg) |
50 |
+ self._add_slot_conflict(pkg) |
51 |
self.digraph.addnode(pkg, myparent, priority=priority) |
52 |
return 0 |
53 |
|
54 |
@@ -4622,8 +4618,7 @@ |
55 |
# A slot collision has occurred. Sometimes this coincides |
56 |
# with unresolvable blockers, so the slot collision will be |
57 |
# shown later if there are no unresolvable blockers. |
58 |
- self._slot_collision_info.add((pkg.slot_atom, pkg.root)) |
59 |
- self._slot_collision_nodes.add(pkg) |
60 |
+ self._add_slot_conflict(pkg) |
61 |
slot_collision = True |
62 |
|
63 |
if slot_collision: |
64 |
@@ -4695,6 +4690,16 @@ |
65 |
dep_stack.append(pkg) |
66 |
return 1 |
67 |
|
68 |
+ def _add_slot_conflict(self, pkg): |
69 |
+ self._slot_collision_nodes.add(pkg) |
70 |
+ slot_key = (pkg.slot_atom, pkg.root) |
71 |
+ slot_nodes = self._slot_collision_info.get(slot_key) |
72 |
+ if slot_nodes is None: |
73 |
+ slot_nodes = set() |
74 |
+ slot_nodes.add(self._slot_pkg_map[pkg.root][pkg.slot_atom]) |
75 |
+ self._slot_collision_info[slot_key] = slot_nodes |
76 |
+ slot_nodes.add(pkg) |
77 |
+ |
78 |
def _add_pkg_deps(self, pkg, allow_unsatisfied=False): |
79 |
|
80 |
mytype = pkg.type_name |