When pruning the list of parents for the slot collision display, always
authorZac Medico <zmedico@gentoo.org>
Wed, 9 Apr 2008 17:55:09 +0000 (17:55 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 9 Apr 2008 17:55:09 +0000 (17:55 -0000)
show parents that themselves have been pulled into collision slots, since
those are more relevant that others. (branches/2.1.2 r9773)

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

pym/_emerge/__init__.py

index ba0c8a1658de6a54c49c8bb57f2ca498b98a1729..e3f8df792d0e9da73afc0265fb89611e05f9fcd9 100644 (file)
@@ -1621,16 +1621,25 @@ class depgraph(object):
                                                for parent in parents:
                                                        if isinstance(parent, DependencyArg):
                                                                pruned_list.append(parent)
-                                                               if len(pruned_list) == max_parents:
-                                                                       break
+                                               # Prefer Packages instances that themselves have been
+                                               # pulled into collision slots.
+                                               for parent in parents:
+                                                       if isinstance(parent, Package) and \
+                                                               (parent.slot_atom, parent.root) \
+                                                               in self._slot_collision_info:
+                                                               pruned_list.append(parent)
                                                for parent in parents:
                                                        if not isinstance(parent, DependencyArg):
                                                                pruned_list.append(parent)
-                                                               if len(pruned_list) == max_parents:
+                                                               if len(pruned_list) >= max_parents:
                                                                        break
                                                parents = pruned_list
                                        msg.append(" pulled in by\n")
+                                       shown_parents = set()
                                        for parent in parents:
+                                               if parent in shown_parents:
+                                                       continue
+                                               shown_parents.add(parent)
                                                msg.append(2*indent)
                                                msg.append(str(parent))
                                                msg.append("\n")