Index: pym/portage.py =================================================================== --- pym/portage.py (revision 4018) +++ pym/portage.py (revision 4019) @@ -318,6 +318,10 @@ self.okeys=[] def addnode(self,mykey,myparent): + if mykey == myparent: + # Refuse to make a node depend on itself so that the caller doesn't + # accidentally create a bogus circular dependency. + myparent = None if not self.dict.has_key(mykey): self.okeys.append(mykey) if myparent is None: Index: bin/emerge =================================================================== --- bin/emerge (revision 4018) +++ bin/emerge (revision 4019) @@ -689,10 +689,14 @@ #"no downgrade" emerge """ - jbigkey=string.join(mybigkey) - # Prevent cycles where packages are already in the digraph - if self.digraph.hasnode(jbigkey+" merge") or self.digraph.hasnode(jbigkey+" nomerge"): + jbigkey = " ".join(mybigkey) + " merge" + if self.digraph.hasnode(jbigkey): + if addme: + self.digraph.addnode(jbigkey, myparent) return 1 + jbigkey = " ".join(mybigkey) + " nomerge" + if self.digraph.hasnode(jbigkey): + return 1 self.spinner.update() mytype,myroot,mykey=mybigkey