Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 235542
Collapse All | Expand All

(-)pym/_emerge/__init__.py (-5 / +19 lines)
Lines 9642-9649 Link Here
9642
		self._prune_digraph()
9642
		self._prune_digraph()
9643
9643
9644
		chosen_pkg = None
9644
		chosen_pkg = None
9645
		later = set(self._pkg_queue)
9645
		for pkg in self._pkg_queue:
9646
		for pkg in self._pkg_queue:
9646
			if not self._dependent_on_scheduled_merges(pkg):
9647
			later.remove(pkg)
9648
			if not self._dependent_on_scheduled_merges(pkg, later):
9647
				chosen_pkg = pkg
9649
				chosen_pkg = pkg
9648
				break
9650
				break
9649
9651
Lines 9658-9667 Link Here
9658
9660
9659
		return chosen_pkg
9661
		return chosen_pkg
9660
9662
9661
	def _dependent_on_scheduled_merges(self, pkg):
9663
	def _dependent_on_scheduled_merges(self, pkg, later):
9662
		"""
9664
		"""
9663
		Traverse the subgraph of the given packages deep dependencies
9665
		Traverse the subgraph of the given packages deep dependencies
9664
		to see if it contains any scheduled merges.
9666
		to see if it contains any scheduled merges.
9667
		@param pkg: a package to check dependencies for
9668
		@type pkg: Package
9669
		@param later: packages for which dependence should be ignored
9670
			since they will be merged later than pkg anyway and therefore
9671
			delaying the merge of pkg will not result in a more optimal
9672
			merge order
9673
		@type later: set
9665
		@rtype: bool
9674
		@rtype: bool
9666
		@returns: True if the package is dependent, False otherwise.
9675
		@returns: True if the package is dependent, False otherwise.
9667
		"""
9676
		"""
Lines 9671-9684 Link Here
9671
9680
9672
		dependent = False
9681
		dependent = False
9673
		traversed_nodes = set([pkg])
9682
		traversed_nodes = set([pkg])
9674
		node_stack = graph.child_nodes(pkg)
9683
		direct_deps = graph.child_nodes(pkg)
9684
		node_stack = direct_deps
9685
		direct_deps = frozenset(direct_deps)
9675
		while node_stack:
9686
		while node_stack:
9676
			node = node_stack.pop()
9687
			node = node_stack.pop()
9677
			if node in traversed_nodes:
9688
			if node in traversed_nodes:
9678
				continue
9689
				continue
9679
			traversed_nodes.add(node)
9690
			traversed_nodes.add(node)
9680
			if not (node.installed and node.operation == "nomerge") and \
9691
			if not ((node.installed and node.operation == "nomerge") or \
9681
				node not in completed_tasks:
9692
				(node.operation == "uninstall" and \
9693
				node not in direct_deps) or \
9694
				node in completed_tasks or \
9695
				node in later):
9682
				dependent = True
9696
				dependent = True
9683
				break
9697
				break
9684
			node_stack.extend(graph.child_nodes(node))
9698
			node_stack.extend(graph.child_nodes(node))

Return to bug 235542