treewalk: fix plib_collisions with same cpv
authorZac Medico <zmedico@gentoo.org>
Sat, 14 May 2011 21:25:16 +0000 (14:25 -0700)
committerZac Medico <zmedico@gentoo.org>
Thu, 26 May 2011 02:47:22 +0000 (19:47 -0700)
pym/portage/dbapi/vartree.py

index 01c8b0ef90e0a0ca53e783c7f2889b4d73ee730b..db081e127f52772a66755905df36679cece191de 100644 (file)
@@ -3426,14 +3426,20 @@ class dblink(object):
                                for cpv, paths in plib_collisions.items():
                                        if cpv not in plib_dict:
                                                continue
-                                       if cpv == self.mycpv:
-                                               continue
-                                       has_vdb_entry = True
-                                       try:
-                                               slot, counter = self.vartree.dbapi.aux_get(
-                                                       cpv, ["SLOT", "COUNTER"])
-                                       except KeyError:
-                                               has_vdb_entry = False
+                                       has_vdb_entry = False
+                                       if cpv != self.mycpv:
+                                               # If we've replaced another instance with the
+                                               # same cpv then the vdb entry no longer belongs
+                                               # to it, so we'll have to get the slot and couter
+                                               # from plib_registry._data instead.
+                                               try:
+                                                       slot, counter = self.vartree.dbapi.aux_get(
+                                                               cpv, ["SLOT", "COUNTER"])
+                                                       has_vdb_entry = True
+                                               except KeyError:
+                                                       pass
+
+                                       if not has_vdb_entry:
                                                # It's possible for previously unmerged packages
                                                # to have preserved libs in the registry, so try
                                                # to retrieve the slot and counter from there.