In the slot collision display, show a maximum of 3 parents
authorZac Medico <zmedico@gentoo.org>
Wed, 14 Nov 2007 00:30:51 +0000 (00:30 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 14 Nov 2007 00:30:51 +0000 (00:30 -0000)
for each package in order to avoid flooding the display.

svn path=/main/trunk/; revision=8500

pym/_emerge/__init__.py

index e2c657aa39403600f727e7661d010a923cb1cbcc..8df77b5587bb3bd2a2f880a1eabcf64100e0f673 100644 (file)
@@ -1275,6 +1275,8 @@ class depgraph(object):
                        "package slot have been \n")
                msg.append("!!! pulled into the dependency graph:\n\n")
                indent = "  "
+               # Max number of parents shown, to avoid flooding the display.
+               max_parents = 3
                for slot_atom, root in self._slot_collision_info:
                        msg.append(slot_atom)
                        msg.append("\n\n")
@@ -1288,11 +1290,31 @@ class depgraph(object):
                                msg.append(str(node))
                                parents = self._parent_child_digraph.parent_nodes(node)
                                if parents:
+                                       omitted_parents = 0
+                                       if len(parents) > max_parents:
+                                               omitted_parents = len(parents) - max_parents
+                                               pruned_list = []
+                                               # When generating the pruned list, prefer instances
+                                               # of DependencyArg over instances of Package.
+                                               for parent in parents:
+                                                       if isinstance(parent, DependencyArg):
+                                                               pruned_list.append(parent)
+                                                               if len(pruned_list) == max_parents:
+                                                                       break
+                                               for parent in parents:
+                                                       if not isinstance(parent, DependencyArg):
+                                                               pruned_list.append(parent)
+                                                               if len(pruned_list) == max_parents:
+                                                                       break
+                                               parents = pruned_list
                                        msg.append(" pulled in by\n")
                                        for parent in parents:
                                                msg.append(2*indent)
                                                msg.append(str(parent))
                                                msg.append("\n")
+                                       if omitted_parents:
+                                               msg.append(2*indent)
+                                               msg.append("(and %d more)\n" % omitted_parents)
                                else:
                                        msg.append(" (no parents)\n")
                                msg.append("\n")