diff options
-rwxr-xr-x | bin/emerge | 10 | ||||
-rw-r--r-- | pym/portage.py | 4 |
2 files changed, 11 insertions, 3 deletions
diff --git a/bin/emerge b/bin/emerge index 75258b12b..6e4dae692 100755 --- a/bin/emerge +++ b/bin/emerge @@ -689,9 +689,13 @@ class depgraph: #"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() diff --git a/pym/portage.py b/pym/portage.py index c46aea9f9..96791b377 100644 --- a/pym/portage.py +++ b/pym/portage.py @@ -318,6 +318,10 @@ class digraph: 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: |