From cd3d635d03ebebcd5c30abf45c8c921cb86bcd34 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Wed, 27 Sep 2006 06:22:44 +0000 Subject: Add SLOT support to fakedbapi then use it for depgraph blocker handling and dep_zapdeps preference selection. svn path=/main/trunk/; revision=4539 --- pym/portage.py | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) (limited to 'pym') diff --git a/pym/portage.py b/pym/portage.py index 0ea10737d..474be3b84 100644 --- a/pym/portage.py +++ b/pym/portage.py @@ -3367,7 +3367,7 @@ def dep_eval(deplist): 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 @@ def dep_zapdeps(unreduced, reduced, myroot, use_binaries=0, trees=None, 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 @@ def dep_zapdeps(unreduced, reduced, myroot, use_binaries=0, trees=None, 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 @@ def dep_zapdeps(unreduced, reduced, myroot, use_binaries=0, trees=None, 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 @@ def dep_check(depstring, mydbapi, mysettings, use="yes", mode=None, myuse=None, 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 @@ class fakedbapi(dbapi): 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 @@ class fakedbapi(dbapi): 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 -- cgit v1.2.3-1-g7c22