Add a --unordered-display option for use with --tree. This allows the display
authorZac Medico <zmedico@gentoo.org>
Fri, 23 Oct 2009 05:19:59 +0000 (05:19 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 23 Oct 2009 05:19:59 +0000 (05:19 -0000)
to be optimized differently since the merge order is not preserved. Thanks
to Sebastian Mingramm (few) for the initial patch.

svn path=/main/trunk/; revision=14703

man/emerge.1
pym/_emerge/Scheduler.py
pym/_emerge/actions.py
pym/_emerge/depgraph.py
pym/_emerge/main.py

index 34fbe6459aa64b7eafbf301dca5cb0ff3db43ecb..bcdc747cafba5abae044c9e4705a3ab6a4dcb718 100644 (file)
@@ -226,6 +226,12 @@ system.  Its arguments can be \fIatoms\fR or
 \fIebuilds\fR. For a dependency aware version of \fB\-\-unmerge\fR,
 use \fB\-\-depclean\fR or \fB\-\-prune\fR.
 .TP
+.BR "\-\-unordered-display "
+By default the displayed merge list is sorted using the order in
+which the packages will be merged. When \fB\-\-tree\fR is used together 
+with this option, this constraint is removed, hopefully leading to a 
+more readable dependency tree.
+.TP
 .BR "\-\-update " (\fB\-u\fR)
 Updates packages to the best version available, which may not always be the 
 highest version number due to masking for testing and development.
index c95003dd76579bea42a2a2fa7e9154984b54ceae..4fcb9fc05384a9726ddc7b19f22422c33750abbc 100644 (file)
@@ -1492,9 +1492,14 @@ class Scheduler(PollScheduler):
 
                if self._show_list():
                        if "--tree" in self.myopts:
-                               portage.writemsg_stdout("\n" + \
-                                       darkgreen("These are the packages that " + \
-                                       "would be merged, in reverse order:\n\n"))
+                               if "--unordered-display" in self.myopts:
+                                       portage.writemsg_stdout("\n" + \
+                                               darkgreen("These are the packages that " + \
+                                               "would be merged:") + "\n\n")
+                               else:
+                                       portage.writemsg_stdout("\n" + \
+                                               darkgreen("These are the packages that " + \
+                                               "would be merged, in reverse order:") + "\n\n")
 
                        else:
                                portage.writemsg_stdout("\n" + \
index 24617a7cfe39ec60a4529e0422ed200d428301f9..ea7f241a898011f583e4eb08289223dec6b96143 100644 (file)
@@ -176,8 +176,14 @@ def action_build(settings, trees, mtimedb,
                else:
                        action = "merged"
                if "--tree" in myopts and action != "fetched": # Tree doesn't work with fetching
-                       print()
-                       print(darkgreen("These are the packages that would be %s, in reverse order:") % action)
+                       if "--unordered-display" in myopts:
+                               portage.writemsg_stdout("\n" + \
+                                       darkgreen("These are the packages that " + \
+                                       "would be %s:" % action) + "\n\n")
+                       else:
+                               portage.writemsg_stdout("\n" + \
+                                       darkgreen("These are the packages that " + \
+                                       "would be %s, in reverse order:" % action) + "\n\n")
                        print()
                else:
                        print()
index 74f79b3c93cf54aaaa805617856c5bc5fdfcf2f0..e79c744719ec0ef0b360803ce3a71965619f3574 100644 (file)
@@ -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.
index 92a6d491f2dd9a9a29330218bdc555017e2bbdf6..b00c8fb17748ead05dde4b68c038b451a74db38e 100644 (file)
@@ -66,6 +66,7 @@ options=[
 "--searchdesc",
 "--skipfirst",
 "--tree",
+"--unordered-display",
 "--update",
 "--verbose",
 ]