Merged from trunk 9383:9385
authorFabian Groffen <grobian@gentoo.org>
Tue, 26 Feb 2008 08:25:02 +0000 (08:25 -0000)
committerFabian Groffen <grobian@gentoo.org>
Tue, 26 Feb 2008 08:25:02 +0000 (08:25 -0000)
   | 9384    | Bug #211365 - Use catpkgsplit() instead of pkgsplit() on the |
   | zmedico | cpv in the dblink constructor since otherwise weird          |
   |         | categories containing numbers can make pkgsplit() return     |
   |         | None (likely related to version regex handling).             |
   |         | (branches/2.1.2 r9383)                                       |

   | 9385    | For depclean/prune unmerge order, if there are no            |
   | zmedico | dependencies between package then just unmerge them          |
   |         | alphabetically.                                              |

svn path=/main/branches/prefix/; revision=9386

pym/_emerge/__init__.py
pym/portage/dbapi/vartree.py

index bcaaed88c5fec04a7967003c5327cc0e871b9993..7d0ea9c4d9b904d0f51ce6ee3502fbbb72fbc77f 100644 (file)
@@ -6755,33 +6755,39 @@ def action_depclean(settings, trees, ldpath_mtimes,
                                                if cpv in clean_set:
                                                        graph.add(cpv, node, priority=priority)
 
-               # Order nodes from lowest to highest overall reference count for
-               # optimal root node selection.
-               node_refcounts = {}
-               for node in graph.order:
-                       node_refcounts[node] = len(graph.parent_nodes(node))
-               def cmp_reference_count(node1, node2):
-                       return node_refcounts[node1] - node_refcounts[node2]
-               graph.order.sort(cmp_reference_count)
-
-               ignore_priority_range = [None]
-               ignore_priority_range.extend(
-                       xrange(UnmergeDepPriority.MIN, UnmergeDepPriority.MAX + 1))
-               while not graph.empty():
-                       for ignore_priority in ignore_priority_range:
-                               nodes = graph.root_nodes(ignore_priority=ignore_priority)
-                               if nodes:
-                                       break
-                       if not nodes:
-                               raise AssertionError("no root nodes")
-                       if ignore_priority is not None:
-                               # Some deps have been dropped due to circular dependencies,
-                               # so only pop one node in order do minimize the number that
-                               # are dropped.
-                               del nodes[1:]
-                       for node in nodes:
-                               graph.remove(node)
-                               cleanlist.append(node)
+               if len(graph.order) == len(graph.root_nodes()):
+                       # If there are no dependencies between packages
+                       # then just unmerge them alphabetically.
+                       cleanlist = graph.order[:]
+                       cleanlist.sort()
+               else:
+                       # Order nodes from lowest to highest overall reference count for
+                       # optimal root node selection.
+                       node_refcounts = {}
+                       for node in graph.order:
+                               node_refcounts[node] = len(graph.parent_nodes(node))
+                       def cmp_reference_count(node1, node2):
+                               return node_refcounts[node1] - node_refcounts[node2]
+                       graph.order.sort(cmp_reference_count)
+       
+                       ignore_priority_range = [None]
+                       ignore_priority_range.extend(
+                               xrange(UnmergeDepPriority.MIN, UnmergeDepPriority.MAX + 1))
+                       while not graph.empty():
+                               for ignore_priority in ignore_priority_range:
+                                       nodes = graph.root_nodes(ignore_priority=ignore_priority)
+                                       if nodes:
+                                               break
+                               if not nodes:
+                                       raise AssertionError("no root nodes")
+                               if ignore_priority is not None:
+                                       # Some deps have been dropped due to circular dependencies,
+                                       # so only pop one node in order do minimize the number that
+                                       # are dropped.
+                                       del nodes[1:]
+                               for node in nodes:
+                                       graph.remove(node)
+                                       cleanlist.append(node)
 
                unmerge(root_config, myopts,
                        "unmerge", cleanlist, ldpath_mtimes)
index 6f5f3c9e0bf645866b25b9f50fdf427f987c9db2..9ff6ca0ab6cd60714a723f4f3f20fe9497f503c3 100644 (file)
@@ -884,7 +884,8 @@ class dblink(object):
                self.cat = cat
                self.pkg = pkg
                self.mycpv = self.cat + "/" + self.pkg
-               self.mysplit = pkgsplit(self.mycpv)
+               self.mysplit = list(catpkgsplit(self.mycpv)[1:])
+               self.mysplit[0] = "%s/%s" % (self.cat, self.mysplit[0])
                self.treetype = treetype
                if vartree is None:
                        from portage import db