From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id DCF9113877A for ; Mon, 1 Sep 2014 17:03:47 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id B7D45E0BC2; Mon, 1 Sep 2014 17:03:45 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 48E39E0BC2 for ; Mon, 1 Sep 2014 17:03:45 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 20B0D33BF37 for ; Mon, 1 Sep 2014 17:03:44 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id C0A2F4729 for ; Mon, 1 Sep 2014 17:03:42 +0000 (UTC) From: "Zac Medico" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Zac Medico" Message-ID: <1409590891.d569a2d7275c65f991ea0e9648edf9458be240fa.zmedico@gentoo> Subject: [gentoo-commits] proj/portage:master commit in: pym/_emerge/ X-VCS-Repository: proj/portage X-VCS-Files: pym/_emerge/depgraph.py X-VCS-Directories: pym/_emerge/ X-VCS-Committer: zmedico X-VCS-Committer-Name: Zac Medico X-VCS-Revision: d569a2d7275c65f991ea0e9648edf9458be240fa X-VCS-Branch: master Date: Mon, 1 Sep 2014 17:03:42 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: fc9dd323-db43-4676-9dff-7e63e12d2c30 X-Archives-Hash: 08413fb0f3cf5819c6b4891fe5f82f3a commit: d569a2d7275c65f991ea0e9648edf9458be240fa Author: Zac Medico gentoo org> AuthorDate: Mon Sep 1 17:01:31 2014 +0000 Commit: Zac Medico gentoo org> CommitDate: Mon Sep 1 17:01:31 2014 +0000 URL: http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=d569a2d7 _slot_operator_update_probe: fix bug #508762 This fixes the check_reverse_dependencies function (inside the depgraph _slot_operator_update_probe method) to account for irrelevant parent atoms from parents that need to be rebuilt or have been involved in unsolved slot conflicts. X-Gentoo-Bug: 508762 X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=508762 Reviewed-by: Brian Dolbec gentoo.org> --- pym/_emerge/depgraph.py | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index 845a43a..d6cd24d 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -1567,14 +1567,40 @@ class depgraph(object): selective = "selective" in self._dynamic_config.myparams want_downgrade = None - def check_reverse_dependencies(existing_pkg, candidate_pkg): + def check_reverse_dependencies(existing_pkg, candidate_pkg, + replacement_parent=None): """ Check if candidate_pkg satisfies all of existing_pkg's non- slot operator parents. """ + built_slot_operator_parents = set() for parent, atom in self._dynamic_config._parent_atoms.get(existing_pkg, []): - if atom.slot_operator == "=" and getattr(parent, "built", False): - continue + if atom.slot_operator_built: + built_slot_operator_parents.add(parent) + + for parent, atom in self._dynamic_config._parent_atoms.get(existing_pkg, []): + if isinstance(parent, Package): + if parent in built_slot_operator_parents: + # This parent may need to be rebuilt, so its + # dependencies aren't necessarily relevant. + continue + + if replacement_parent is not None and \ + (replacement_parent.slot_atom == parent.slot_atom + or replacement_parent.cpv == parent.cpv): + # This parent is irrelevant because we intend to + # replace it with replacement_parent. + continue + + if any(pkg is not parent and + (pkg.slot_atom == parent.slot_atom or + pkg.cpv == parent.cpv) for pkg in + self._dynamic_config._package_tracker.match( + parent.root, Atom(parent.cp))): + # This parent may need to be eliminated due to a + # slot conflict, so its dependencies aren't + # necessarily relevant. + continue atom_set = InternalPackageSet(initial_atoms=(atom,), allow_repo=True) @@ -1693,7 +1719,8 @@ class depgraph(object): continue if not insignificant and \ - check_reverse_dependencies(dep.child, pkg): + check_reverse_dependencies(dep.child, pkg, + replacement_parent=replacement_parent): candidate_pkg_atoms.append((pkg, unevaluated_atom)) candidate_pkgs.append(pkg)