For bug #166564, make a circular dependency panic more user friendly by displaying...
authorZac Medico <zmedico@gentoo.org>
Mon, 19 Feb 2007 00:46:37 +0000 (00:46 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 19 Feb 2007 00:46:37 +0000 (00:46 -0000)
svn path=/main/branches/2.1.2/; revision=6007

bin/emerge

index cd19e2640e82c300375df82df28622097574f30a..1efcc75d05290656ab2876cc34455ae035e03112 100755 (executable)
@@ -2072,14 +2072,10 @@ class depgraph:
                                                selected_nodes = [blocker_deps.pop()]
 
                        if not selected_nodes:
-                               if reversed:
-                                       """The circular deps ouput should have less noise when
-                                       altlist is not in reversed mode."""
-                                       self.altlist()
-                               print "!!! Error: circular dependencies:"
-                               print
-                               # Reduce the noise level to a minimum via elimination of root
-                               # nodes.
+                               # No leaf nodes are available, so we have a circular
+                               # dependency panic situation.  Reduce the noise level to a
+                               # minimum via repeated elimination of root nodes since they
+                               # have no parents and thus can not be part of a cycle.
                                while True:
                                        root_nodes = mygraph.root_nodes(
                                                ignore_priority=DepPriority.SOFT)
@@ -2087,7 +2083,18 @@ class depgraph:
                                                break
                                        for node in root_nodes:
                                                mygraph.remove(node)
+                               # Display the USE flags that are enabled on nodes that are part
+                               # of dependency cycles in case that helps the user decide to
+                               # disable some of them.
+                               self.myopts.pop("--quiet", None)
+                               self.myopts.pop("--verbose", None)
+                               self.display([list(node) for node in mygraph.order])
+                               print "!!! Error: circular dependencies:"
+                               print
                                mygraph.debug_print()
+                               print
+                               print "!!! Note that circular dependencies can often be avoided by temporarily"
+                               print "!!! disabling USE flags that trigger optional dependencies."
                                sys.exit(1)
 
                        for node in selected_nodes: