summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/_emerge/depgraph.py38
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: