diff --git a/bin/emerge b/bin/emerge index 6e33f00..f1b875f 100755 --- a/bin/emerge +++ b/bin/emerge @@ -707,7 +707,7 @@ class depgraph: If the package has new iuse flags or different use flags then if --newuse is specified, we need to merge the package. """ if merging==0 and "--newuse" in self.myopts and \ - vardbapi.cpv_exists(mykey): + mytype != "installed" and vardbapi.cpv_exists(mykey): old_use = vardbapi.aux_get(mykey, ["USE"])[0].split() if mytype == "binary": iuses = bindb.aux_get(mykey, ["IUSE"])[0].split() @@ -764,6 +764,12 @@ class depgraph: edepend["RDEPEND"]=string.join(mytbz2.getelements("RDEPEND")," ") edepend["PDEPEND"]=string.join(mytbz2.getelements("PDEPEND")," ") edepend["SLOT"] =mytbz2.getfile("SLOT",mypkgparts[2]) + elif mytype == "installed": + myfoo = self.trees[myroot]["vartree"].dbapi.aux_get( + mykey, ["RDEPEND","PDEPEND"]) + edepend["DEPEND"] = "" + edepend["RDEPEND"] = myfoo[0] + edepend["PDEPEND"] = myfoo[1] elif mytype=="ebuild": try: mymeta = ["DEPEND","RDEPEND","PDEPEND"] @@ -965,6 +971,7 @@ class depgraph: portdb = self.trees[myroot]["porttree"].dbapi bindb = self.trees[myroot]["bintree"].dbapi + vartree = self.trees[myroot]["vartree"] pkgsettings = self.pkgsettings[myroot] if "--debug" in self.myopts: @@ -1048,12 +1055,32 @@ class depgraph: old_use = bindb.aux_get(myeb_pkg, ["USE"])[0].split() pkgsettings.setcpv(myeb_pkg) now_use = pkgsettings["USE"].split() - for x in iuses: - if (old_use.count(x) and not now_use.count(x)) or (not old_use.count(x) and now_use.count(x)): + for useflag in iuses: + if (old_use.count(useflag) and \ + not now_use.count(useflag)) or \ + (not old_use.count(useflag) and \ + now_use.count(useflag)): myeb_pkg = None break - if (not myeb) and (not myeb_pkg): + myeb_inst = None + if not arg: + myeb_inst = portage.best(vartree.dbapi.match(x)) + if myeb_inst and "--newuse" in self.myopts: + iuses, old_use = \ + vartree.dbapi.aux_get(myeb_inst, ["IUSE","USE"]) + iuses = iuses.split() + old_use = old_use.split() + now_use = pkgsettings["USE"].split() + for useflag in iuses: + if (old_use.count(useflag) and \ + not now_use.count(useflag)) or \ + (not old_use.count(useflag) and \ + now_use.count(useflag)): + myeb_inst = None + break + + if (not myeb_inst) and (not myeb) and (not myeb_pkg): if raise_on_missing: raise ValueError if not arg: @@ -1105,7 +1132,30 @@ class depgraph: else: myeb_pkg = None - if myeb: + def cpvpkgsplit(cpv): + mysplit = portage.catpkgsplit(cpv) + return [mysplit[0] + "/" + mysplit[1], + mysplit[2], mysplit[3]] + + if myeb_inst and (myeb or myeb_pkg): + if myeb: + if portage.pkgcmp( + cpvpkgsplit(myeb), cpvpkgsplit(myeb_inst)) > 0: + myeb_inst = None + else: + myeb = None + else: + if portage.pkgcmp( + cpvpkgsplit(myeb_pkg), cpvpkgsplit(myeb_inst)) > 0: + myeb_inst = None + else: + myeb_pkg = None + + if myeb_inst: + binpkguseflags = \ + vartree.dbapi.aux_get(myeb_inst, ["USE"])[0].split() + myk = ["installed", myroot, myeb_inst] + elif myeb: myk=["ebuild",myroot,myeb] elif myeb_pkg: binpkguseflags = \