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 <gentoo-commits+bounces-316451-garchives=archives.gentoo.org@lists.gentoo.org>)
	id 1Pop7n-0000MB-8S
	for garchives@archives.gentoo.org; Mon, 14 Feb 2011 03:29:19 +0000
Received: from pigeon.gentoo.org (localhost [127.0.0.1])
	by pigeon.gentoo.org (Postfix) with SMTP id 1E6F2E073C;
	Mon, 14 Feb 2011 03:29:11 +0000 (UTC)
Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183])
	by pigeon.gentoo.org (Postfix) with ESMTP id CC9B5E073C
	for <gentoo-commits@lists.gentoo.org>; Mon, 14 Feb 2011 03:29:10 +0000 (UTC)
Received: from pelican.gentoo.org (unknown [66.219.59.40])
	(using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits))
	(No client certificate requested)
	by smtp.gentoo.org (Postfix) with ESMTPS id 30AEC1B40B4
	for <gentoo-commits@lists.gentoo.org>; Mon, 14 Feb 2011 03:29:10 +0000 (UTC)
Received: from localhost.localdomain (localhost [127.0.0.1])
	by pelican.gentoo.org (Postfix) with ESMTP id 7FB0A8006A
	for <gentoo-commits@lists.gentoo.org>; Mon, 14 Feb 2011 03:29:09 +0000 (UTC)
From: "Zac Medico" <zmedico@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Content-type: text/plain; charset=UTF-8
Reply-To: gentoo-dev@lists.gentoo.org, "Zac Medico" <zmedico@gentoo.org>
Message-ID: <b4f98ec5a1eb2e010a455b19db5bef8d61def241.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: b4f98ec5a1eb2e010a455b19db5bef8d61def241
Date: Mon, 14 Feb 2011 03:29:09 +0000 (UTC)
Precedence: bulk
List-Post: <mailto:gentoo-commits@lists.gentoo.org>
List-Help: <mailto:gentoo-commits+help@lists.gentoo.org>
List-Unsubscribe: <mailto:gentoo-commits+unsubscribe@lists.gentoo.org>
List-Subscribe: <mailto:gentoo-commits+subscribe@lists.gentoo.org>
List-Id: Gentoo Linux mail <gentoo-commits.gentoo.org>
X-BeenThere: gentoo-commits@lists.gentoo.org
Content-Transfer-Encoding: quoted-printable
X-Archives-Salt: 
X-Archives-Hash: 62b043d981b56eb17d73ae544216adb6

commit:     b4f98ec5a1eb2e010a455b19db5bef8d61def241
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 14 03:28:07 2011 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Feb 14 03:28:07 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=3Dproj/portage.git;a=
=3Dcommit;h=3Db4f98ec5

get_dep_chain: prefer parents in merge list

This will fix bug #354747.

---
 pym/_emerge/depgraph.py |   30 ++++++++++++++++++++----------
 1 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index 30e7046..ef4d1f0 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -2359,20 +2359,20 @@ class depgraph(object):
 			# When traversing to parents, prefer arguments over packages
 			# since arguments are root nodes. Never traverse the same
 			# package twice, in order to prevent an infinite loop.
+			child =3D node
 			selected_parent =3D None
+			parent_arg =3D None
+			parent_merge =3D None
+
 			for parent in self._dynamic_config.digraph.parent_nodes(node):
 				if parent in traversed_nodes:
 					continue
 				if isinstance(parent, DependencyArg):
-					if self._dynamic_config.digraph.parent_nodes(parent):
-						selected_parent =3D parent
-						child =3D node
-					else:
-						dep_chain.append(
-							(_unicode_decode("%s") % (parent,), "argument"))
-						selected_parent =3D None
-					break
+					parent_arg =3D parent
 				else:
+					if isinstance(parent, Package) and \
+						parent.operation =3D=3D "merge":
+						parent_merge =3D parent
 					if unsatisfied_dependency and node is start_node:
 						# Make sure that pkg doesn't satisfy parent's dependency.
 						# This ensures that we select the correct parent for use
@@ -2382,11 +2382,21 @@ class depgraph(object):
 								atom_set =3D InternalPackageSet(initial_atoms=3D(atom,))
 								if not atom_set.findAtomForPackage(start_node):
 									selected_parent =3D parent
-									child =3D node
 								break
 					else:
 						selected_parent =3D parent
-						child =3D node
+
+			if parent_merge is not None:
+				# Prefer parent in the merge list (bug #354747).
+				selected_parent =3D parent_merge
+			elif parent_arg is not None:
+				if self._dynamic_config.digraph.parent_nodes(parent_arg):
+					selected_parent =3D parent_arg
+				else:
+					dep_chain.append(
+						(_unicode_decode("%s") % (parent,), "argument"))
+					selected_parent =3D None
+
 			node =3D selected_parent
 		return dep_chain
=20