summaryrefslogtreecommitdiffstats
path: root/pym/portage.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2006-09-27 06:22:44 +0000
committerZac Medico <zmedico@gentoo.org>2006-09-27 06:22:44 +0000
commitcd3d635d03ebebcd5c30abf45c8c921cb86bcd34 (patch)
treeccb0eb877c061cc774876befcdbf59b5ca302a04 /pym/portage.py
parentfd76b435d5ce953e91a0efa8f6706aa3bd505f62 (diff)
downloadportage-cd3d635d03ebebcd5c30abf45c8c921cb86bcd34.tar.gz
portage-cd3d635d03ebebcd5c30abf45c8c921cb86bcd34.tar.bz2
portage-cd3d635d03ebebcd5c30abf45c8c921cb86bcd34.zip
Add SLOT support to fakedbapi then use it for depgraph blocker handling and dep_zapdeps preference selection.
svn path=/main/trunk/; revision=4539
Diffstat (limited to 'pym/portage.py')
-rw-r--r--pym/portage.py43
1 files changed, 34 insertions, 9 deletions
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