diff -uNr portage.newgraph/bin/emerge portage/bin/emerge --- portage.newgraph/bin/emerge 2006-09-19 18:01:51.000000000 +0000 +++ portage/bin/emerge 2006-09-19 18:09:54.000000000 +0000 @@ -673,7 +673,7 @@ "--getbinpkg" in self.myopts, "--getbinpkgonly" in self.myopts) - def create(self,mybigkey,myparent=None,addme=1,myuse=None,soft_dep=False,arg=None): + def create(self,mybigkey,myparent=None,addme=1,myuse=None,soft_dep=False,rev_dep=False,arg=None): """ Fills the digraph with nodes comprised of packages to merge. mybigkey is the package spec of the package to merge. @@ -685,17 +685,22 @@ #IUSE-aware emerge -> USE DEP aware depgraph #"no downgrade" emerge """ - jbigkey = " ".join(mybigkey) + " merge" if self.digraph.hasnode(jbigkey): if addme and jbigkey != myparent: # Refuse to make a node depend on itself so that the we don't # don't create a bogus circular dependency in self.altlist(). - self.digraph.addnode(jbigkey, myparent, soft_dep=soft_dep) + if rev_dep and myparent: + self.digraph.addnode(myparent, jbigkey, soft_dep=soft_dep) + else: + self.digraph.addnode(jbigkey, myparent, soft_dep=soft_dep) return 1 jbigkey = " ".join(mybigkey) + " nomerge" if self.digraph.hasnode(jbigkey): - self.digraph.addnode(jbigkey, myparent, soft_dep=soft_dep) + if rev_dep and myparent: + self.digraph.addnode(myparent, jbigkey, soft_dep=soft_dep) + else: + self.digraph.addnode(jbigkey, myparent, soft_dep=soft_dep) return 1 self.spinner.update() @@ -777,7 +782,10 @@ """ At this point, we have either hit a blocker and returned, found the package in the depgraph already and returned, or we are here. Whether we are merging or not; we must add the package to the depgraph; so we do that here. """ - self.digraph.addnode(string.join(mybigkey),myparent,soft_dep=soft_dep) + if rev_dep and myparent: + self.digraph.addnode(myparent,string.join(mybigkey),soft_dep=soft_dep) + else: + self.digraph.addnode(string.join(mybigkey),myparent,soft_dep=soft_dep) """ This section determines whether we go deeper into dependencies or not. We want to go deeper on a few occasions: @@ -820,7 +828,7 @@ if edepend.has_key("PDEPEND") and edepend["PDEPEND"]: # Post Depend -- Add to the list without a parent, as it depends # on a package being present AND must be built after that package. - if not self.select_dep(myroot,edepend["PDEPEND"],myuse=myuse,soft_deps=True): + if not self.select_dep(myroot,edepend["PDEPEND"],myparent=mp,myuse=myuse,soft_deps=True,rev_deps=True): return 0 except ValueError, e: pkgs = e.args[0] @@ -983,7 +991,7 @@ if curslot == myslot: return match - def select_dep(self,myroot,depstring,myparent=None,arg=None,myuse=None,raise_on_missing=False,soft_deps=False): + def select_dep(self,myroot,depstring,myparent=None,arg=None,myuse=None,raise_on_missing=False,soft_deps=False,rev_deps=False): """ Given a depstring, create the depgraph such that all dependencies are satisfied. myroot = $ROOT from environment, where {R,P}DEPENDs are merged to. myparent = the node whose depstring is being passed in @@ -1174,14 +1182,14 @@ #we are a dependency, so we want to be unconditionally added soft_dep = soft_deps or vardb.match(x) if not self.create(selected_pkg[0:3], myparent, - myuse=selected_pkg[-1], soft_dep=soft_dep, arg=arg): + myuse=selected_pkg[-1], soft_dep=soft_dep, rev_dep=rev_deps, arg=arg): return 0 else: #if mysource is not set, then we are a command-line dependency and should not be added #if --onlydeps is specified. if not self.create(selected_pkg[0:3], myparent, addme=("--onlydeps" not in self.myopts), - myuse=selected_pkg[-1], arg=arg): + myuse=selected_pkg[-1], rev_dep=rev_deps, arg=arg): return 0 if "--debug" in self.myopts: