public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
From: Zac Medico <zmedico@gentoo.org>
To: gentoo-portage-dev@lists.gentoo.org
Cc: Zac Medico <zmedico@gentoo.org>
Subject: [gentoo-portage-dev] [PATCH] find_smallest_cycle: don't merge satisfied PDEPEND too early
Date: Wed,  2 Dec 2020 00:33:32 -0800	[thread overview]
Message-ID: <20201202083332.78037-1-zmedico@gentoo.org> (raw)

After PDEPENDs have been neglected by the find_smallest_cycle function,
do not try to merge them too early if they are already satisfied by
an installed package. This fixes incorrect merge order for PDEPEND
cycles involving xorg-server and xorg-drivers, which was triggered
by commit 5095c2023595a75e2848f1ad3dbe25b5fb451a44 because it gave
PDEPEND higher priority than satisfied buildtime dependencies.

Fixes: 5095c2023595 ("find_smallest_cycle: enhance search prioritization")
Reported-by: josef64 in #gentoo-portage
Bug: https://bugs.gentoo.org/754903
Signed-off-by: Zac Medico <zmedico@gentoo.org>
---
 lib/_emerge/DepPrioritySatisfiedRange.py      |  1 +
 lib/_emerge/depgraph.py                       |  8 +++---
 .../tests/resolver/test_merge_order.py        | 27 +++++++++++++++++--
 3 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/lib/_emerge/DepPrioritySatisfiedRange.py b/lib/_emerge/DepPrioritySatisfiedRange.py
index fb0d7db4e..f546590e0 100644
--- a/lib/_emerge/DepPrioritySatisfiedRange.py
+++ b/lib/_emerge/DepPrioritySatisfiedRange.py
@@ -93,6 +93,7 @@ class DepPrioritySatisfiedRange:
 	ignore_medium      = _ignore_runtime
 	ignore_medium_soft = _ignore_satisfied_buildtime_slot_op
 	ignore_medium_post = _ignore_runtime_post
+	ignore_medium_post_satisifed = _ignore_satisfied_runtime_post
 	ignore_soft        = _ignore_optional
 
 
diff --git a/lib/_emerge/depgraph.py b/lib/_emerge/depgraph.py
index 1271bda3e..0450291d4 100644
--- a/lib/_emerge/depgraph.py
+++ b/lib/_emerge/depgraph.py
@@ -8052,18 +8052,18 @@ class depgraph:
 									(selected_nodes[0],), noiselevel=-1)
 
 			if selected_nodes and ignore_priority is not None:
-				# Try to merge ignored medium_post deps as soon as possible
+				# Try to merge neglected medium_post deps as soon as possible
 				# if they're not satisfied by installed packages.
 				for node in selected_nodes:
 					children = set(mygraph.child_nodes(node))
-					soft = children.difference(
+					medium_post_satisifed = children.difference(
 						mygraph.child_nodes(node,
 							ignore_priority = \
-							DepPrioritySatisfiedRange.ignore_soft))
+							DepPrioritySatisfiedRange.ignore_medium_post_satisifed))
 					medium_post = children.difference(
 						mygraph.child_nodes(node,
 						ignore_priority=DepPrioritySatisfiedRange.ignore_medium_post))
-					medium_post -= soft
+					medium_post -= medium_post_satisifed
 					for child in medium_post:
 						if child in selected_nodes:
 							continue
diff --git a/lib/portage/tests/resolver/test_merge_order.py b/lib/portage/tests/resolver/test_merge_order.py
index f81fd2f6f..0510a0636 100644
--- a/lib/portage/tests/resolver/test_merge_order.py
+++ b/lib/portage/tests/resolver/test_merge_order.py
@@ -217,12 +217,23 @@ class MergeOrderTestCase(TestCase):
 				"IUSE" : "X +encode",
 				"RDEPEND" : "|| ( >=media-video/ffmpeg-0.6.90_rc0-r2[X=,encode=] >=media-video/libav-0.6.90_rc[X=,encode=] )",
 			},
+			"x11-base/xorg-drivers-1.20-r2": {
+				"EAPI": "7",
+				"IUSE": "+video_cards_fbdev",
+				"PDEPEND": "x11-base/xorg-server video_cards_fbdev? ( x11-drivers/xf86-video-fbdev )",
+			},
 			"x11-base/xorg-server-1.14.1" : {
 				"EAPI" : "5",
 				"SLOT": "0/1.14.1",
 				"DEPEND" : "media-libs/mesa",
 				"RDEPEND" : "media-libs/mesa",
+				"PDEPEND": "x11-base/xorg-drivers",
 			},
+			"x11-drivers/xf86-video-fbdev-0.5.0-r1": {
+				"EAPI": "7",
+				"DEPEND": "x11-base/xorg-server:=",
+				"RDEPEND": "x11-base/xorg-server",
+			}
 		}
 
 		installed = {
@@ -299,12 +310,24 @@ class MergeOrderTestCase(TestCase):
 				"USE" : "encode",
 				"RDEPEND" : "|| ( >=media-video/ffmpeg-0.6.90_rc0-r2[X=,encode=] >=media-video/libav-0.6.90_rc[X=,encode=] )",
 			},
+			"x11-base/xorg-drivers-1.20-r2": {
+				"EAPI": "7",
+				"IUSE": "+video_cards_fbdev",
+				"USE": "video_cards_fbdev",
+				"PDEPEND": "x11-base/xorg-server x11-drivers/xf86-video-fbdev",
+			},
 			"x11-base/xorg-server-1.14.1" : {
 				"EAPI" : "5",
 				"SLOT": "0/1.14.1",
 				"DEPEND" : "media-libs/mesa",
 				"RDEPEND" : "media-libs/mesa",
+				"PDEPEND": "x11-base/xorg-drivers",
 			},
+			"x11-drivers/xf86-video-fbdev-0.5.0-r1": {
+				"EAPI": "7",
+				"DEPEND": "x11-base/xorg-server:0/1.14.1=",
+				"RDEPEND": "x11-base/xorg-server",
+			}
 		}
 
 		test_cases = (
@@ -486,10 +509,10 @@ class MergeOrderTestCase(TestCase):
 			# Both deps are already satisfied by installed packages, but
 			# the := dep is given higher priority in merge order.
 			ResolverPlaygroundTestCase(
-				["media-libs/mesa", "x11-base/xorg-server"],
+				["media-libs/mesa", "x11-drivers/xf86-video-fbdev", "x11-base/xorg-server"],
 				success=True,
 				all_permutations = True,
-				mergelist = ['x11-base/xorg-server-1.14.1', 'media-libs/mesa-9.1.3']),
+				mergelist = ['x11-base/xorg-server-1.14.1', 'media-libs/mesa-9.1.3', 'x11-drivers/xf86-video-fbdev-0.5.0-r1']),
 			# Test prioritization of the find_smallest_cycle function, which should
 			# minimize the use of installed packages to break cycles. If installed
 			# packages must be used to break cycles, then it should prefer to do this
-- 
2.26.2



                 reply	other threads:[~2020-12-02  8:33 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201202083332.78037-1-zmedico@gentoo.org \
    --to=zmedico@gentoo.org \
    --cc=gentoo-portage-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox