Fix check_reverse_dependencies to ignore dependencies of parent packages for which updates are desirable, and add required _want_update_pkg support for DependencyArg parents. This solves a missed llvm update by ignoring a reverse dependency from the installed instance of clang, since an update to a newer version of clang is desirable.
In order to cope with this change, there are 2 existing unit tests that require larger --backtrack settings in order to succeed. X-Gentoo-Bug: 584626 X-Gentoo-Bug-url: https://bugs.gentoo.org/show_bug.cgi?id=584626 --- pym/_emerge/depgraph.py | 40 ++++++++++++++++++++-- .../soname/test_slot_conflict_reinstall.py | 1 + .../tests/resolver/test_slot_conflict_rebuild.py | 2 +- .../resolver/test_slot_operator_reverse_deps.py | 6 +++- 4 files changed, 44 insertions(+), 5 deletions(-) diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index f78f08d..ef3cc5d 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -1822,6 +1822,22 @@ class depgraph(object): # necessarily relevant. continue + if (not self._frozen_config.excluded_pkgs. + findAtomForPackage(parent, + modified_use=self._pkg_use_enabled(parent)) and + self._upgrade_available(parent)): + want_update = False + for grandparent in self._dynamic_config.digraph.\ + parent_nodes(parent): + if self._want_update_pkg(grandparent, parent): + want_update = True + break + + if want_update: + # This parent may be irrelevant, since an + # update is available (see bug 584626). + continue + atom_set = InternalPackageSet(initial_atoms=(atom,), allow_repo=True) if not atom_set.findAtomForPackage(candidate_pkg, @@ -2113,6 +2129,19 @@ class depgraph(object): self._dynamic_config._need_restart = True + def _upgrade_available(self, pkg): + """ + Detect cases where an upgrade of the given package is available + within the same slot. + """ + available_pkg = None + for available_pkg in self._iter_similar_available(pkg, + pkg.slot_atom): + if available_pkg >= pkg: + return True + + return False + def _downgrade_probe(self, pkg): """ Detect cases where a downgrade of the given package is considered @@ -5382,9 +5411,14 @@ class depgraph(object): # should have been masked before it was selected raise - depth = parent.depth or 0 - if isinstance(depth, int): - depth += 1 + if isinstance(parent, Package): + depth = parent.depth or 0 + if isinstance(depth, int): + depth += 1 + elif parent.reset_depth: + depth = 0 + else: + depth = self._UNREACHABLE_DEPTH if arg_atoms: for arg, atom in arg_atoms: diff --git a/pym/portage/tests/resolver/soname/test_slot_conflict_reinstall.py b/pym/portage/tests/resolver/soname/test_slot_conflict_reinstall.py index 40e6995..f474761 100644 --- a/pym/portage/tests/resolver/soname/test_slot_conflict_reinstall.py +++ b/pym/portage/tests/resolver/soname/test_slot_conflict_reinstall.py @@ -89,6 +89,7 @@ class SonameSlotConflictReinstallTestCase(TestCase): "--ignore-soname-deps": "n", "--update": True, "--usepkgonly": True, + "--backtrack": 10, }, success = True, mergelist = [ diff --git a/pym/portage/tests/resolver/test_slot_conflict_rebuild.py b/pym/portage/tests/resolver/test_slot_conflict_rebuild.py index b39eaf0..2dfa79c 100644 --- a/pym/portage/tests/resolver/test_slot_conflict_rebuild.py +++ b/pym/portage/tests/resolver/test_slot_conflict_rebuild.py @@ -91,7 +91,7 @@ class SlotConflictRebuildTestCase(TestCase): # upgrade and we don't want to trigger unnecessary rebuilds. ResolverPlaygroundTestCase( ["@world"], - options = {"--update": True, "--deep": True}, + options = {"--update": True, "--deep": True, "--backtrack": 4}, success = True, mergelist = ["app-misc/D-2", "app-misc/E-0"]), diff --git a/pym/portage/tests/resolver/test_slot_operator_reverse_deps.py b/pym/portage/tests/resolver/test_slot_operator_reverse_deps.py index 72879f8..ce614a4 100644 --- a/pym/portage/tests/resolver/test_slot_operator_reverse_deps.py +++ b/pym/portage/tests/resolver/test_slot_operator_reverse_deps.py @@ -79,7 +79,11 @@ class SlotOperatorReverseDepsTestCase(TestCase): ["@world"], options = {"--update": True, "--deep": True}, success = True, - mergelist = [], + mergelist = [ + 'sys-devel/llvm-3.8.0-r2', + 'sys-devel/clang-3.8.0-r100', + 'media-libs/mesa-11.2.2', + ], ), ResolverPlaygroundTestCase( -- 2.7.4