From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1Sg7Zq-0000ct-CW for garchives@archives.gentoo.org; Sun, 17 Jun 2012 04:59:06 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 67954E0B90; Sun, 17 Jun 2012 04:58:54 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 1E7FFE0B90 for ; Sun, 17 Jun 2012 04:58:54 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 55E0D1B4021 for ; Sun, 17 Jun 2012 04:58:53 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id 4D255E5430 for ; Sun, 17 Jun 2012 04:58:51 +0000 (UTC) From: "Zac Medico" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Zac Medico" Message-ID: <1339909118.30b25033e67d2285f165d12e25903ea2cabf0235.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: 30b25033e67d2285f165d12e25903ea2cabf0235 X-VCS-Branch: master Date: Sun, 17 Jun 2012 04:58:51 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: cfa85138-15fd-42bb-bbfc-e12d7a6124b8 X-Archives-Hash: 266207105dcf0d94266aa311ed3d3ac6 commit: 30b25033e67d2285f165d12e25903ea2cabf0235 Author: Zac Medico gentoo org> AuthorDate: Sun Jun 17 04:58:38 2012 +0000 Commit: Zac Medico gentoo org> CommitDate: Sun Jun 17 04:58:38 2012 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/portage.git;a= =3Dcommit;h=3D30b25033 _process_slot_conflicts: do one slot at a time This allows us to avoid redundant processing of slots that have already been processed by a previous call. --- pym/_emerge/depgraph.py | 73 ++++++++++++++++++++++++-----------------= ------ 1 files changed, 37 insertions(+), 36 deletions(-) diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index 3f6c9f8..a669166 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -371,7 +371,6 @@ class _dynamic_depgraph_config(object): # blocker validation is only able to account for one package per slot. self._slot_collision_nodes =3D set() self._parent_atoms =3D {} - self._slot_conflict_parent_atoms =3D set() self._slot_conflict_handler =3D None self._circular_dependency_handler =3D None self._serialized_tasks_cache =3D None @@ -799,39 +798,43 @@ class depgraph(object): writemsg(line + '\n', noiselevel=3D-1) writemsg('\n', noiselevel=3D-1) =20 - def _process_slot_conflicts(self): + def _process_slot_conflicts(self, root, slot_atom): """ Process slot conflict data to identify specific atoms which lead to conflict. These atoms only match a subset of the packages that have been pulled into a given slot. """ - for (slot_atom, root), slot_nodes \ - in self._dynamic_config._slot_collision_info.items(): + slot_nodes =3D \ + self._dynamic_config._slot_collision_info[(slot_atom, root)] =20 - all_parent_atoms =3D set() - for pkg in slot_nodes: - parent_atoms =3D self._dynamic_config._parent_atoms.get(pkg) - if not parent_atoms: + conflict_atoms =3D set() + slot_parent_atoms =3D set() + for pkg in slot_nodes: + parent_atoms =3D self._dynamic_config._parent_atoms.get(pkg) + if not parent_atoms: + continue + slot_parent_atoms.update(parent_atoms) + + for pkg in slot_nodes: + parent_atoms =3D self._dynamic_config._parent_atoms.get(pkg) + if parent_atoms is None: + parent_atoms =3D set() + self._dynamic_config._parent_atoms[pkg] =3D parent_atoms + for parent_atom in slot_parent_atoms: + if parent_atom in parent_atoms: continue - all_parent_atoms.update(parent_atoms) + # Use package set for matching since it will match via + # PROVIDE when necessary, while match_from_list does not. + parent, atom =3D parent_atom + atom_set =3D InternalPackageSet( + initial_atoms=3D(atom,), allow_repo=3DTrue) + if atom_set.findAtomForPackage(pkg, + modified_use=3Dself._pkg_use_enabled(pkg)): + parent_atoms.add(parent_atom) + else: + conflict_atoms.add(parent_atom) =20 - for pkg in slot_nodes: - parent_atoms =3D self._dynamic_config._parent_atoms.get(pkg) - if parent_atoms is None: - parent_atoms =3D set() - self._dynamic_config._parent_atoms[pkg] =3D parent_atoms - for parent_atom in all_parent_atoms: - if parent_atom in parent_atoms: - continue - # Use package set for matching since it will match via - # PROVIDE when necessary, while match_from_list does not. - parent, atom =3D parent_atom - atom_set =3D InternalPackageSet( - initial_atoms=3D(atom,), allow_repo=3DTrue) - if atom_set.findAtomForPackage(pkg, modified_use=3Dself._pkg_use_en= abled(pkg)): - parent_atoms.add(parent_atom) - else: - self._dynamic_config._slot_conflict_parent_atoms.add(parent_atom) + return conflict_atoms =20 def _handle_slot_conflict(self, existing_node, pkg, dep, arg_atoms): =20 @@ -846,6 +849,9 @@ class depgraph(object): parent, atom =3D parent_atom self._add_parent_atom(pkg, parent_atom) =20 + conflict_atoms =3D \ + self._process_slot_conflicts(pkg.root, pkg.slot_atom) + # The existing node should not already be in # runtime_pkg_mask, since that would trigger an # infinite backtracking loop. @@ -860,7 +866,7 @@ class depgraph(object): elif self._dynamic_config._allow_backtracking and \ not self._accept_blocker_conflicts() and \ not self.need_restart(): - self._slot_confict_backtrack(existing_node, pkg) + self._slot_confict_backtrack(existing_node, pkg, conflict_atoms) return False =20 if debug: @@ -873,11 +879,9 @@ class depgraph(object): =20 return True =20 - def _slot_confict_backtrack(self, existing_node, pkg): + def _slot_confict_backtrack(self, existing_node, pkg, conflict_atoms): =20 debug =3D "--debug" in self._frozen_config.myopts - self._process_slot_conflicts() - backtrack_data =3D [] fallback_data =3D [] all_parents =3D set() @@ -897,9 +901,9 @@ class depgraph(object): parent_atoms =3D \ self._dynamic_config._parent_atoms.get(to_be_selected, set()) if parent_atoms: - conflict_atoms =3D self._dynamic_config._slot_conflict_parent_atoms.= intersection(parent_atoms) - if conflict_atoms: - parent_atoms =3D conflict_atoms + p_conflict_atoms =3D conflict_atoms.intersection(parent_atoms) + if p_conflict_atoms: + parent_atoms =3D p_conflict_atoms =20 all_parents.update(parent_atoms) =20 @@ -4938,9 +4942,6 @@ class depgraph(object): self._dynamic_config._skip_restart =3D True raise self._unknown_internal_error() =20 - if self._dynamic_config._slot_collision_info: - self._process_slot_conflicts() - def _serialize_tasks(self): =20 debug =3D "--debug" in self._frozen_config.myopts