summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-10-22 18:49:02 +0000
committerZac Medico <zmedico@gentoo.org>2007-10-22 18:49:02 +0000
commit860cd660895829d6915e3dc9643f78e2f12bf3da (patch)
tree0f85eefb5cf1b539ceccccb097a36d0292c6c201 /pym
parenta3eb818d57142c736365b61aade6889ee3b82519 (diff)
downloadportage-860cd660895829d6915e3dc9643f78e2f12bf3da.tar.gz
portage-860cd660895829d6915e3dc9643f78e2f12bf3da.tar.bz2
portage-860cd660895829d6915e3dc9643f78e2f12bf3da.zip
In depgraph.create(), don't ignore direct circular dependencies
anymore since altlist() is able to handle it properly in cases where the dependency is satisfied. If the dep is unsatisfied then it can not be ignored. (trunk r8225) Allow the depgraph to add old-style virtual providers but prefer any pre-existing providers over new ones that are added. This prevents things like ghc-6.4.2 from selecting itself to satisfy it's own virtual/ghc dependency (creating a circular dependency) in cases where it should select the default ghc-bin provider. (trunk r8185:8187) svn path=/main/branches/2.1.2/; revision=8229
Diffstat (limited to 'pym')
-rw-r--r--pym/portage.py16
1 files changed, 12 insertions, 4 deletions
diff --git a/pym/portage.py b/pym/portage.py
index 91bfc3402..6a1229167 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -1005,6 +1005,8 @@ class config:
self.userVirtuals = {}
# Virtual negatives from user specifications.
self.negVirtuals = {}
+ # Virtuals added by the depgraph via self.setinst().
+ self._depgraphVirtuals = {}
self.user_profile_dir = None
self.local_config = local_config
@@ -1028,6 +1030,7 @@ class config:
self.treeVirtuals = copy.deepcopy(clone.treeVirtuals)
self.userVirtuals = copy.deepcopy(clone.userVirtuals)
self.negVirtuals = copy.deepcopy(clone.negVirtuals)
+ self._depgraphVirtuals = copy.deepcopy(clone._depgraphVirtuals)
self.use_defs = copy.deepcopy(clone.use_defs)
self.usemask = copy.deepcopy(clone.usemask)
@@ -1859,12 +1862,17 @@ class config:
if len(self.virtuals) == 0:
self.getvirtuals()
# Grab the virtuals this package provides and add them into the tree virtuals.
- provides = mydbapi.aux_get(mycpv, ["PROVIDE"])[0]
+ if isinstance(mydbapi, dict):
+ provides = mydbapi["PROVIDE"]
+ else:
+ provides = mydbapi.aux_get(mycpv, ["PROVIDE"])[0]
if not provides:
return
if isinstance(mydbapi, portdbapi):
self.setcpv(mycpv, mydb=mydbapi)
myuse = self["USE"]
+ elif isinstance(mydbapi, dict):
+ myuse = mydbapi["USE"]
else:
myuse = mydbapi.aux_get(mycpv, ["USE"])[0]
virts = flatten(portage_dep.use_reduce(portage_dep.paren_reduce(provides), uselist=myuse.split()))
@@ -1873,10 +1881,10 @@ class config:
cp = dep_getkey(mycpv)
for virt in virts:
virt = dep_getkey(virt)
- providers = self.treeVirtuals.get(virt)
+ providers = self._depgraphVirtuals.get(virt)
if providers is None:
providers = []
- self.treeVirtuals[virt] = providers
+ self._depgraphVirtuals[virt] = providers
if cp not in providers:
providers.append(cp)
modified = True
@@ -2216,7 +2224,7 @@ class config:
ptVirtuals[virt].append(cp)
virtuals = stack_dictlist([ptVirtuals, self.treeVirtuals,
- self.dirVirtuals])
+ self.dirVirtuals, self._depgraphVirtuals])
return virtuals
def __delitem__(self,mykey):