From: Zac Medico Date: Fri, 30 May 2008 23:46:08 +0000 (-0000) Subject: Fix PackageSet.findAtomForPackage() to find the most specific atom since X-Git-Tag: v2.2_pre8~58 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=0ab17a249aa27220c00dad07c7c94f90b617ccd0;p=portage.git Fix PackageSet.findAtomForPackage() to find the most specific atom since it can affect behavior when deciding whether or not to add a slot atom to the world file. svn path=/main/trunk/; revision=10511 --- diff --git a/pym/portage/sets/base.py b/pym/portage/sets/base.py index 2ae4723fb..d9f2a8d91 100644 --- a/pym/portage/sets/base.py +++ b/pym/portage/sets/base.py @@ -105,10 +105,19 @@ class PackageSet(object): None if there are no matches. This matches virtual arguments against the PROVIDE metadata. This can raise an InvalidDependString exception if an error occurs while parsing PROVIDE.""" - try: - return self.iterAtomsForPackage(pkg).next() - except StopIteration: - return None + + # Atoms matched via PROVIDE must be temporarily transformed since + # match_from_list() only works correctly when atom.cp == pkg.cp. + rev_transform = {} + for atom in self.iterAtomsForPackage(pkg): + if atom.cp == pkg.cp: + rev_transform[atom] = atom + else: + rev_transform[Atom(atom.replace(atom.cp, pkg.cp, 1))] = atom + best_match = best_match_to_list(pkg, rev_transform.iterkeys()) + if best_match: + return rev_transform[best_match] + return None def iterAtomsForPackage(self, pkg): """