From: Zac Medico Date: Mon, 19 Feb 2007 00:46:37 +0000 (-0000) Subject: For bug #166564, make a circular dependency panic more user friendly by displaying... X-Git-Tag: v2.1.2.1~59 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=40115895cfc8bfff24595770c0a3f3ff4c98fe26;p=portage.git For bug #166564, make a circular dependency panic more user friendly by displaying the USE flags that are enabled on nodes that are part of dependency cycles and display a note hinting that circular dependencies can often be avoided by temporarily disabling USE flags. (trunk r6005:6006) svn path=/main/branches/2.1.2/; revision=6007 --- diff --git a/bin/emerge b/bin/emerge index cd19e2640..1efcc75d0 100755 --- a/bin/emerge +++ b/bin/emerge @@ -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: