From 6d3bae4d1d48033668107863bf30d483792350e9 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Fri, 10 Jun 2011 18:30:37 -0700 Subject: slot_collision_notice: don't omit any use dep When USE flags are removed, it can be essential to see all broken reverse dependencies here, so don't omit any. If the list is long, people can simply use a pager. --- pym/_emerge/resolver/slot_collision.py | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/pym/_emerge/resolver/slot_collision.py b/pym/_emerge/resolver/slot_collision.py index 88476595d..d43b8892d 100644 --- a/pym/_emerge/resolver/slot_collision.py +++ b/pym/_emerge/resolver/slot_collision.py @@ -309,6 +309,7 @@ class slot_conflict_handler(object): msg.append(" pulled in by\n") selected_for_display = set() + unconditional_use_deps = set() for (type, sub_type), parents in collision_reasons.items(): #From each (type, sub_type) pair select at least one atom. @@ -335,8 +336,6 @@ class slot_conflict_handler(object): #not possible to change them on the parent, which means there #are fewer possible solutions. use = sub_type - hard_matches = set() - conditional_matches = set() for ppkg, atom, other_pkg in parents: parent_use = None if isinstance(ppkg, Package): @@ -345,17 +344,13 @@ class slot_conflict_handler(object): _pkg_use_enabled(other_pkg), other_pkg.iuse.is_valid_flag, parent_use=parent_use) if use in violated_atom.use.enabled.union(violated_atom.use.disabled): - hard_matches.add((ppkg, atom)) - else: - conditional_matches.add((ppkg, atom)) - - if hard_matches: - matches = hard_matches - else: - matches = conditional_matches - - if not selected_for_display.intersection(matches): - selected_for_display.add(matches.pop()) + unconditional_use_deps.add((ppkg, atom)) + # When USE flags are removed, it can be + # essential to see all broken reverse + # dependencies here, so don't omit any. + # If the list is long, people can simply + # use a pager. + selected_for_display.add((ppkg, atom)) def highlight_violations(atom, version, use=[]): """Colorize parts of an atom""" @@ -400,7 +395,14 @@ class slot_conflict_handler(object): return atom_str - for parent_atom in selected_for_display: + # Show unconditional use deps first, since those + # are more problematic than the conditional kind. + ordered_list = list(unconditional_use_deps) + if len(selected_for_display) > len(unconditional_use_deps): + for parent_atom in selected_for_display: + if parent_atom not in unconditional_use_deps: + ordered_list.append(parent_atom) + for parent_atom in ordered_list: parent, atom = parent_atom msg.append(2*indent) if isinstance(parent, -- cgit v1.2.3-1-g7c22