diff options
author | Zac Medico <zmedico@gentoo.org> | 2007-10-22 18:49:02 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2007-10-22 18:49:02 +0000 |
commit | 860cd660895829d6915e3dc9643f78e2f12bf3da (patch) | |
tree | 0f85eefb5cf1b539ceccccb097a36d0292c6c201 /pym | |
parent | a3eb818d57142c736365b61aade6889ee3b82519 (diff) | |
download | portage-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.py | 16 |
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): |