diff options
-rw-r--r-- | pym/_emerge/depgraph.py | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index 64e9b19bd..16326ee9a 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -198,6 +198,9 @@ class _dynamic_depgraph_config(object): self._ignored_deps = [] self._highest_pkg_cache = {} + self._unsat_req_use = {} + self._pkg_config_issues = {} + self._needed_unstable_keywords = backtrack_parameters.needed_unstable_keywords self._needed_license_changes = backtrack_parameters.needed_license_changes self._needed_use_config_changes = backtrack_parameters.needed_use_config_changes @@ -350,15 +353,12 @@ class depgraph(object): def _show_missed_update(self): - if '--quiet' in self._frozen_config.myopts and \ - '--debug' not in self._frozen_config.myopts: - return - # In order to minimize noise, show only the highest # missed update from each SLOT. missed_updates = {} for pkg, mask_reasons in \ - self._dynamic_config._runtime_pkg_mask.items(): + chain(self._dynamic_config._runtime_pkg_mask.items(), + self._dynamic_config._pkg_config_issues.items()): if pkg.installed: # Exclude installed here since we only # want to show available updates. @@ -382,6 +382,18 @@ class depgraph(object): missed_update_types.setdefault(mask_type, []).append((pkg, parent_atoms)) + if '--quiet' in self._frozen_config.myopts and \ + '--debug' not in self._frozen_config.myopts: + missed_update_types.pop("slot conflict", None) + missed_update_types.pop("missing dependency", None) + + required_use = missed_update_types.pop("required use", None) + if required_use is not None: + # For display purposes, unsatisfied REQUIRED_USE + # can be treated like a missing dependency. + missed_update_types.setdefault("missing dependency", + []).extend(required_use) + self._show_missed_update_slot_conflicts( missed_update_types.get("slot conflict")) @@ -1890,7 +1902,14 @@ class depgraph(object): self._dynamic_config._unsatisfied_deps_for_display.append( ((myroot, atom), {"myparent" : arg})) return 0, myfavorites - self._dynamic_config._missing_args.append((arg, atom)) + pkg = self._dynamic_config._unsat_req_use.get((myroot, atom)) + if pkg is not None: + config_issues = \ + self._dynamic_config._pkg_config_issues.setdefault(pkg, {}) + parent_atoms = config_issues.setdefault("required use", set()) + parent_atoms.add((arg, myroot, atom)) + else: + self._dynamic_config._missing_args.append((arg, atom)) continue if atom.cp != pkg.cp: # For old-style virtuals, we need to repeat the @@ -2653,7 +2672,7 @@ class depgraph(object): writemsg_stdout(" nothing similar found.\n" , noiselevel=-1) msg = [] - if not isinstance(myparent, AtomArg): + if not isinstance(myparent, DependencyArg): # It's redundant to show parent for AtomArg since # it's the same as 'xinfo' displayed above. dep_chain = self._get_dep_chain(myparent, atom) @@ -3031,6 +3050,7 @@ class depgraph(object): # represented by the found_available_arg flag. found_available_arg = False packages_with_invalid_use_config = [] + pkgs_with_unsat_req_use = [] for find_existing_node in True, False: if existing_node: break @@ -3246,6 +3266,7 @@ class depgraph(object): continue if not required_use_is_sat: packages_with_invalid_use_config.append(pkg) + pkgs_with_unsat_req_use.append(pkg) continue if pkg.cp == atom_cp: @@ -3329,6 +3350,9 @@ class depgraph(object): break if not matched_packages: + if pkgs_with_unsat_req_use: + self._dynamic_config._unsat_req_use[(root, atom)] = \ + pkgs_with_unsat_req_use[0] return None, None if "--debug" in self._frozen_config.myopts: |