aboutsummaryrefslogtreecommitdiffstats
path: root/lib/_emerge/depgraph.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2023-11-28 15:58:23 -0800
committerZac Medico <zmedico@gentoo.org>2023-11-28 16:00:18 -0800
commit9823f70c6e4ef3cdd6abb4d9fc599ce02a138125 (patch)
tree4e74476c0659a6562d01f5267f07706df4a9c116 /lib/_emerge/depgraph.py
parentCancel prefetchers that have not started yet (diff)
downloadgentoo-portage-9823f70c6e4ef3cdd6abb4d9fc599ce02a138125.tar.xz
gentoo-portage-9823f70c6e4ef3cdd6abb4d9fc599ce02a138125.zip
Prefer installed leaves in runtime cycle topological sort
In order to avoid possibly merging a package too early, prefer installed leaves in runtime cycle topological sort. This fixes an AlternativesGzipTestCase failure that arose after 2e298ea7ba36 caused leaves to be selected in a slightly different order. Bug: https://bugs.gentoo.org/917259 Signed-off-by: Zac Medico <zmedico@gentoo.org>
Diffstat (limited to 'lib/_emerge/depgraph.py')
-rw-r--r--lib/_emerge/depgraph.py6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/_emerge/depgraph.py b/lib/_emerge/depgraph.py
index da37f980ada6..9f041f83a90e 100644
--- a/lib/_emerge/depgraph.py
+++ b/lib/_emerge/depgraph.py
@@ -9498,6 +9498,12 @@ class depgraph:
if smallest_leaves is None:
smallest_leaves = [cycle_digraph.order[-1]]
+ # Prefer installed leaves, in order to avoid
+ # merging something too early.
+ installed_leaves = [pkg for pkg in smallest_leaves if pkg.installed]
+ if installed_leaves:
+ smallest_leaves = installed_leaves
+
# Only harvest one node at a time, in order to
# minimize the number of ignored dependencies.
cycle_digraph.remove(smallest_leaves[0])