summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/depgraph.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-10-24 07:04:32 +0000
committerZac Medico <zmedico@gentoo.org>2009-10-24 07:04:32 +0000
commit08915e3ebccfd05776a772d2b224c9c10c96c3eb (patch)
tree83f8a644981eda65b9a52dba51c3aea71f77e0f2 /pym/_emerge/depgraph.py
parent65a38c1c30b577f43a9e4f523a0ee857a4786174 (diff)
downloadportage-08915e3ebccfd05776a772d2b224c9c10c96c3eb.tar.gz
portage-08915e3ebccfd05776a772d2b224c9c10c96c3eb.tar.bz2
portage-08915e3ebccfd05776a772d2b224c9c10c96c3eb.zip
Add a --unordered-display option for use with --tree. This allows the display
to be optimized differently since the merge order is not preserved. Thanks to Sebastian Mingramm (few) for the initial patch. (trunk r14703) svn path=/main/branches/2.1.7/; revision=14712
Diffstat (limited to 'pym/_emerge/depgraph.py')
-rw-r--r--pym/_emerge/depgraph.py39
1 files changed, 37 insertions, 2 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index a61b9fa78..859bda153 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -4534,6 +4534,40 @@ class depgraph(object):
for blocker in uninstall_parents:
mygraph.add(upgrade_node, blocker)
+ if "--unordered-display" in self._frozen_config.myopts:
+ display_list = self._unordered_tree_display(mygraph, mylist)
+ else:
+ display_list = self._ordered_tree_display(mygraph, mylist)
+
+ self._prune_tree_display(display_list)
+
+ return display_list
+
+ def _unordered_tree_display(self, mygraph, mylist):
+ display_list = []
+ seen_nodes = set()
+
+ def print_node(node, depth):
+
+ if node in seen_nodes:
+ pass
+ else:
+ seen_nodes.add(node)
+
+ if isinstance(node, Package):
+ display_list.append((node, depth, True))
+ else:
+ depth = -1
+
+ for child_node in mygraph.child_nodes(node):
+ print_node(child_node, depth + 1)
+
+ for root_node in mygraph.root_nodes():
+ print_node(root_node, 0)
+
+ return display_list
+
+ def _ordered_tree_display(self, mygraph, mylist):
depth = 0
shown_edges = set()
tree_nodes = []
@@ -4594,6 +4628,9 @@ class depgraph(object):
tree_nodes = []
add_parents(x, True)
+ return display_list
+
+ def _prune_tree_display(self, display_list):
last_merge_depth = 0
for i in range(len(display_list) - 1, -1, -1):
node, depth, ordered = display_list[i]
@@ -4613,8 +4650,6 @@ class depgraph(object):
depth >= display_list[i+1][1]:
del display_list[i]
- return display_list
-
def display_problems(self):
"""
Display problems with the dependency graph such as slot collisions.