Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 98186 Details for
Bug 147766
[PATCH] Build up a full depgraph
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
use fakedbapi with slot support for blockers and dep_zapdeps
fakedb_slots.patch (text/plain), 6.14 KB, created by
Zac Medico
on 2006-09-26 21:23:25 UTC
(
hide
)
Description:
use fakedbapi with slot support for blockers and dep_zapdeps
Filename:
MIME Type:
Creator:
Zac Medico
Created:
2006-09-26 21:23:25 UTC
Size:
6.14 KB
patch
obsolete
>Index: pym/portage.py >=================================================================== >--- pym/portage.py (revision 4538) >+++ pym/portage.py (working copy) >@@ -3367,7 +3367,7 @@ > return 1 > > def dep_zapdeps(unreduced, reduced, myroot, use_binaries=0, trees=None, >- return_all_deps=False): >+ fakedb=None, return_all_deps=False): > """Takes an unreduced and reduced deplist and removes satisfied dependencies. > Returned deplist contains steps that must be taken to satisfy dependencies.""" > if trees is None: >@@ -3384,7 +3384,7 @@ > if isinstance(dep, list): > unresolved += dep_zapdeps(dep, satisfied, myroot, > use_binaries=use_binaries, trees=trees, >- return_all_deps=return_all_deps) >+ fakedb=fakedb, return_all_deps=return_all_deps) > elif not satisfied or return_all_deps: > unresolved.append(dep) > return unresolved >@@ -3403,7 +3403,10 @@ > other = [] > > # Alias the trees we'll be checking availability against >- vardb = trees[myroot]["vartree"].dbapi >+ if fakedb: >+ vardb = fakedb >+ else: >+ vardb = trees[myroot]["vartree"].dbapi > if use_binaries: > mydbapi = trees[myroot]["bintree"].dbapi > else: >@@ -3414,7 +3417,8 @@ > for (dep, satisfied) in zip(deps, satisfieds): > if isinstance(dep, list): > atoms = dep_zapdeps(dep, satisfied, myroot, >- use_binaries=use_binaries, trees=trees) >+ use_binaries=use_binaries, trees=trees, >+ fakedb=fakedb, return_all_deps=return_all_deps) > else: > atoms = [dep] > >@@ -3555,8 +3559,12 @@ > writemsg("mysplit: %s\n" % (mysplit), 1) > writemsg("mysplit2: %s\n" % (mysplit2), 1) > >+ fakedb = None >+ if return_all_deps: >+ fakedb = mydbapi > myzaps = dep_zapdeps(mysplit, mysplit2, myroot, >- use_binaries=use_binaries, trees=trees, return_all_deps=return_all_deps) >+ use_binaries=use_binaries, trees=trees, >+ fakedb=fakedb, return_all_deps=return_all_deps) > mylist = flatten(myzaps) > writemsg("myzaps: %s\n" % (myzaps), 1) > writemsg("mylist: %s\n" % (mylist), 1) >@@ -3998,12 +4006,18 @@ > def cpv_all(self): > return self.cpvdict.keys() > >- def cpv_inject(self,mycpv): >+ def cpv_inject(self, mycpv, myslot=None): > """Adds a cpv from the list of available packages.""" > mycp=cpv_getkey(mycpv) >- self.cpvdict[mycpv]=1 >- if not self.cpdict.has_key(mycp): >- self.cpdict[mycp]=[] >+ self.cpvdict[mycpv] = myslot >+ if myslot and mycp in self.cpdict: >+ # If necessary, remove another package in the same SLOT. >+ for cpv in self.cpdict[mycp]: >+ if mycpv != cpv and myslot == self.cpvdict[cpv]: >+ self.cpv_remove(cpv) >+ break >+ if mycp not in self.cpdict: >+ self.cpdict[mycp] = [] > if not mycpv in self.cpdict[mycp]: > self.cpdict[mycp].append(mycpv) > >@@ -4029,6 +4043,17 @@ > if not len(self.cpdict[mycp]): > del self.cpdict[mycp] > >+ def aux_get(self, mycpv, wants): >+ if not self.cpv_exists(mycpv): >+ raise KeyError(mycpv) >+ values = [] >+ for x in wants: >+ if x == "SLOT": >+ values.append(self.cpvdict[mycpv]) >+ else: >+ values.append("") >+ return values >+ > class bindbapi(fakedbapi): > def __init__(self, mybintree=None, settings=None): > self.bintree = mybintree >Index: bin/emerge >=================================================================== >--- bin/emerge (revision 4538) >+++ bin/emerge (working copy) >@@ -654,34 +654,19 @@ > self.outdatedpackages=[] > self.mydbapi={} > self.mydbapi["/"] = portage.fakedbapi(settings=settings) >- self.pkg_slots={"/" : {}} > allcpv = self.trees["/"]["vartree"].getallcpv() > if "empty" not in self.myparams or self.target_root != "/": > for pkg in allcpv: >- self.mydbapi["/"].cpv_inject(pkg) >- for pkg in allcpv: >- myslot = self.trees["/"]["vartree"].dbapi.aux_get(pkg, ["SLOT"])[0] >- mykey = portage.dep_getkey(pkg) >- if mykey in self.pkg_slots["/"]: >- self.pkg_slots["/"][mykey][myslot] = pkg >- else: >- self.pkg_slots["/"][mykey] = {myslot:pkg} >+ myslot = self.trees["/"]["vartree"].dbapi.aux_get(pkg, ["SLOT"])[0] >+ self.mydbapi["/"].cpv_inject(pkg, myslot=myslot) > if self.target_root != "/": >- self.pkg_slots[self.target_root] = {} > allcpv = self.trees[self.target_root]["vartree"].getallcpv() > self.mydbapi[self.target_root] = \ > portage.fakedbapi(settings=settings) > if "empty" not in self.myparams: > for pkg in allcpv: >- self.mydbapi[self.target_root].cpv_inject(pkg) >- for pkg in allcpv: >- myslot = self.trees[self.target_root]["vartree"].dbapi.aux_get( >- pkg, ["SLOT"])[0] >- mykey = portage.dep_getkey(pkg) >- if mykey in self.pkg_slots[self.target_root]: >- self.pkg_slots[self.target_root][mykey][myslot] = pkg >- else: >- self.pkg_slots[self.target_root][mykey] = {myslot:pkg} >+ myslot = self.trees[self.target_root]["vartree"].dbapi.aux_get(pkg, ["SLOT"])[0] >+ self.mydbapi[self.target_root].cpv_inject(pkg, myslot=myslot) > if "--usepkg" in self.myopts: > trees["/"]["bintree"].populate( > "--getbinpkg" in self.myopts, "--getbinpkgonly" in self.myopts) >@@ -750,13 +735,6 @@ > return 1 > else: > mydbapi = self.trees[myroot][self.pkg_tree_map[mytype]].dbapi >- if addme: >- myslot = mydbapi.aux_get(mykey, ["SLOT"])[0] >- depkey = portage.dep_getkey(mykey) >- if depkey in self.pkg_slots: >- self.pkg_slots[myroot][depkey][myslot] = mykey >- else: >- self.pkg_slots[myroot][depkey] = {myslot : mykey} > > if myuse is None: > self.pkgsettings[myroot].setcpv(mykey) >@@ -1082,7 +1060,8 @@ > if p_status == "merge": > """ This fakedbapi data is used in dep_check calls to determine > satisfied deps via dep_wordreduce""" >- self.mydbapi[p_root].cpv_inject(p_key) >+ myslot = self.trees[p_root][self.pkg_tree_map[p_type]].dbapi.aux_get(p_key, ["SLOT"])[0] >+ self.mydbapi[p_root].cpv_inject(p_key, myslot=myslot) > > # Update old-style virtuals if this package provides any. > # These are needed for dep_virtual calls inside dep_check. >@@ -1255,9 +1234,8 @@ > dep_virtual calls inside dep_check.""" > mykey = portage.dep_getkey(mydep) > valid = False >- pkgs = self.pkg_slots[myroot].get(mykey, None) >- if pkgs and portage.match_from_list(mydep, >- [pkgs[myslot] for myslot in pkgs]): >+ if portage.match_from_list(mydep, >+ self.mydbapi[myroot].cp_list(mykey)): > valid = True > if not valid: > self.digraph.remove(blocker)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 147766
:
97111
|
97113
|
97122
|
97180
|
97190
|
97292
|
97305
|
97306
|
97307
|
97312
|
97324
|
97329
|
97336
|
98131
|
98153
| 98186