summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-04-28 02:03:08 +0000
committerZac Medico <zmedico@gentoo.org>2008-04-28 02:03:08 +0000
commit868d86ce3d70f59feb3ea4445839ae15b1863aef (patch)
tree83ac9d03f42fb77bddf5eaccf46144366adf68ec /pym
parent708bb0e80635b5145275595dd6b87bd9bf36245f (diff)
downloadportage-868d86ce3d70f59feb3ea4445839ae15b1863aef.tar.gz
portage-868d86ce3d70f59feb3ea4445839ae15b1863aef.tar.bz2
portage-868d86ce3d70f59feb3ea4445839ae15b1863aef.zip
Fix PackageVirtualDbapi.cpv_inject() to make sure packages with duplicate
cpv or slot are handled correctly. svn path=/main/trunk/; revision=10014
Diffstat (limited to 'pym')
-rw-r--r--pym/_emerge/__init__.py6
1 files changed, 6 insertions, 0 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index 06060b0fd..947634354 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -1583,11 +1583,17 @@ class PackageVirtualDbapi(portage.dbapi):
if cp_list is None:
cp_list = []
self._cp_map[pkg.cp] = cp_list
+ e_pkg = self._cpv_map.get(pkg.cpv)
+ if e_pkg is not None:
+ if e_pkg == pkg:
+ return
+ self.cpv_remove(e_pkg)
for e_pkg in cp_list:
if e_pkg.slot_atom == pkg.slot_atom:
if e_pkg == pkg:
return
self.cpv_remove(e_pkg)
+ break
cp_list.append(pkg)
self._cpv_map[pkg.cpv] = pkg
self._clear_cache()