commit:     c5ad40dbe8f74dcdb2b08d42240e217a8ef440e6
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Fri Mar 30 03:35:24 2018 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri Mar 30 03:47:55 2018 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=c5ad40db

depgraph._serialize_tasks: resolve portage/repoman blockers (bug 651936)

When ensuring that all runtime dependencies are installed before
a new instance of portage, ignore uninstalls. This makes it possible
to solve a blocker between a new version of portage and an older
version of repoman, where an uninstall task for the older version
of repoman appears in the runtime dependencies of the new instance
of portage.

Bug: https://bugs.gentoo.org/651936

 pym/_emerge/depgraph.py | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index 6af7d5714..963bf25f4 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -7671,11 +7671,13 @@ class depgraph(object):
                                return True
                        if node not in mergeable_nodes:
                                return False
-                       if node == replacement_portage and \
-                               mygraph.child_nodes(node,
-                               
ignore_priority=priority_range.ignore_medium_soft):
-                               # Make sure that portage always has all of it's
-                               # RDEPENDs installed first.
+                       if node == replacement_portage and any(
+                               getattr(rdep, 'operation', None) != 'uninstall'
+                               for rdep in mygraph.child_nodes(node,
+                               
ignore_priority=priority_range.ignore_medium_soft)):
+                               # Make sure that portage always has all of its
+                               # RDEPENDs installed first, but ignore 
uninstalls
+                               # (these occur when new portage blocks older 
repoman).
                                return False
                        selected_nodes.add(node)
                        for child in mygraph.child_nodes(node,

Reply via email to