Allow packages specified on the command line to be retroactively upgraded from "nomer...
authorZac Medico <zmedico@gentoo.org>
Fri, 22 Sep 2006 08:11:31 +0000 (08:11 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 22 Sep 2006 08:11:31 +0000 (08:11 -0000)
svn path=/main/trunk/; revision=4494

bin/emerge
pym/portage.py

index 7bf35f190a889ac52560b93ce69112d967e9d8a0..a8af02919743c08a93ed462838aa3eea3144ad1e 100755 (executable)
@@ -721,6 +721,8 @@ class depgraph:
                                self.digraph.addnode(myparent, jbigkey, soft_dep=soft_dep)
                        else:
                                self.digraph.addnode(jbigkey, myparent, soft_dep=soft_dep)
+                       if arg:
+                               self.digraph.replace(jbigkey, " ".join(mybigkey) + " merge")
                        return 1
                
                self.spinner.update()
index 104f1a27917aabae18c2dfadcb7d45ba83a936bc..a97c50171832d9a2d747cfb15d7a84e0d664b589 100644 (file)
@@ -364,6 +364,32 @@ class digraph:
                del self.nodes[node]
                self.order.remove(node)
 
+       def replace(self, oldnode, newnode):
+               """Replace all references to oldnode with references to newnode.
+               This is useful for upgrading a "nomerge" node to a "merge" node.
+
+               @return:
+                       1. None on success.
+                       2. Raise a KeyError if oldnode does not exist.
+                       3. Raise a ValueError if newnode already exists.
+               """
+               if not self.contains(oldnode):
+                       raise KeyError(oldnode)
+               if oldnode == newnode:
+                       return
+               if newnode in self.nodes:
+                       raise ValueError(newnode)
+               for parent in self.nodes[oldnode][1]:
+                       self.nodes[parent][0][newnode] = self.nodes[parent][0][oldnode]
+                       del self.nodes[parent][0][oldnode]
+               for child in self.nodes[oldnode][0]:
+                       self.nodes[child][1][newnode] = self.nodes[child][1][oldnode]
+                       del self.nodes[child][1][oldnode]
+               self.nodes[newnode] = self.nodes[oldnode]
+               del self.nodes[oldnode]
+               oldindex = self.order.index(oldnode)
+               self.order[oldindex] = newnode
+
        def contains(self, node):
                """Checks if the digraph contains mynode"""
                return node in self.nodes