View | Details | Raw Unified
Collapse All | Expand All

(-) bin/emerge (-16 / +45 lines)
 Lines 629-641    Link Here 
		levels:
		levels:
		MEDIUM   The upper boundary for medium dependencies.
		MEDIUM   The upper boundary for medium dependencies.
		MEDIUM_SOFT   The upper boundary for medium-soft dependencies.
		SOFT     The upper boundary for soft dependencies.
		SOFT     The upper boundary for soft dependencies.
		MIN      The lower boundary for soft dependencies.
		MIN      The lower boundary for soft dependencies.
	"""
	"""
	__slots__ = ("__weakref__", "satisfied", "buildtime", "runtime")
	__slots__ = ("__weakref__", "satisfied", "buildtime", "runtime", "runtime_post")
	MEDIUM = -1
	MEDIUM = -1
	SOFT   = -2
	MEDIUM_SOFT = -2
	MIN    = -4
	SOFT   = -3
	MIN    = -6
	def __init__(self, **kwargs):
	def __init__(self, **kwargs):
		for myattr in self.__slots__:
		for myattr in self.__slots__:
			if myattr == "__weakref__":
			if myattr == "__weakref__":
 Lines 648-658    Link Here 
				return 0
				return 0
			if self.runtime:
			if self.runtime:
				return -1
				return -1
			if self.runtime_post:
				return -2
		if self.buildtime:
		if self.buildtime:
			return -2
			return -3
		if self.runtime:
		if self.runtime:
			return -3
			return -4
		return -4
		if self.runtime_post:
			return -5
		return -6
	def __lt__(self, other):
	def __lt__(self, other):
		return self.__int__() < other
		return self.__int__() < other
	def __le__(self, other):
	def __le__(self, other):
 Lines 1303-1309    Link Here 
				# Post Depend -- Add to the list without a parent, as it depends
				# Post Depend -- Add to the list without a parent, as it depends
				# on a package being present AND must be built after that package.
				# on a package being present AND must be built after that package.
				if not self.select_dep(myroot, edepend["PDEPEND"], myparent=mp,
				if not self.select_dep(myroot, edepend["PDEPEND"], myparent=mp,
					myuse=myuse, priority=DepPriority(), rev_deps=True,
					myuse=myuse, priority=DepPriority(runtime_post=True),
					parent_arg=arg):
					parent_arg=arg):
					return 0
					return 0
		except ValueError, e:
		except ValueError, e:
 Lines 2103-2129    Link Here 
					"""Recursively gather a group of nodes that RDEPEND on
					"""Recursively gather a group of nodes that RDEPEND on
					eachother.  This ensures that they are merged as a group
					eachother.  This ensures that they are merged as a group
					and get their RDEPENDs satisfied as soon as possible."""
					and get their RDEPENDs satisfied as soon as possible."""
					def gather_deps(mergeable_nodes, selected_nodes, node):
					def gather_deps(ignore_priority,
						mergeable_nodes, selected_nodes, node):
						if node in selected_nodes:
						if node in selected_nodes:
							return True
							return True
						if node not in mergeable_nodes:
						if node not in mergeable_nodes:
							return False
							return False
						selected_nodes.add(node)
						selected_nodes.add(node)
						for child in mygraph.child_nodes(node,
						for child in mygraph.child_nodes(node,
							ignore_priority=DepPriority.SOFT):
							ignore_priority=ignore_priority):
							if not gather_deps(
							if not gather_deps(ignore_priority,
								mergeable_nodes, selected_nodes, child):
								mergeable_nodes, selected_nodes, child):
								return False
								return False
						return True
						return True
					mergeable_nodes = set(nodes)
					mergeable_nodes = set(nodes)
					for node in nodes:
					for ignore_priority in xrange(DepPriority.SOFT,
						selected_nodes = set()
						DepPriority.MEDIUM_SOFT + 1):
						if gather_deps(
						for node in nodes:
							mergeable_nodes, selected_nodes, node):
							selected_nodes = set()
							if gather_deps(ignore_priority,
								mergeable_nodes, selected_nodes, node):
								break
							else:
								selected_nodes = None
						if selected_nodes:
							break
							break
						else:
							selected_nodes = None
					if selected_nodes and ignore_priority > DepPriority.SOFT:
						# Try to merge ignored medium deps as soon as possible.
						for node in selected_nodes:
							children = set(mygraph.child_nodes(node))
							soft = children.difference(
								mygraph.child_nodes(node,
								ignore_priority=DepPriority.SOFT))
							medium_soft = children.difference(
								mygraph.child_nodes(node,
								ignore_priority=DepPriority.MEDIUM_SOFT))
							medium_soft.difference_update(soft)
							for child in medium_soft:
								if child in selected_nodes:
									continue
								# TODO: Try harder to make these nodes get
								# merged absolutely as soon as possible.
								asap_nodes.append(child)
			if not selected_nodes:
			if not selected_nodes:
				if not myblockers.is_empty():
				if not myblockers.is_empty():
					"""A blocker couldn't be circumnavigated while keeping all
					"""A blocker couldn't be circumnavigated while keeping all