FakeVartree: use live meta if installed EAPI ok
authorZac Medico <zmedico@gentoo.org>
Thu, 26 May 2011 01:04:33 +0000 (18:04 -0700)
committerZac Medico <zmedico@gentoo.org>
Thu, 26 May 2011 01:04:33 +0000 (18:04 -0700)
This will fix bug #368725.

pym/_emerge/FakeVartree.py

index 8ed458dbb8fe9bde1419d4a74d01c973b1179f50..a11966f894bbbe87394307e4113f1fe795f2f2ad 100644 (file)
@@ -94,8 +94,16 @@ class FakeVartree(vartree):
                        repo = _gen_valid_repo(repo)
                        live_metadata = dict(zip(self._portdb_keys,
                                self._portdb.aux_get(pkg, self._portdb_keys, myrepo=repo)))
-                       if not portage.eapi_is_supported(live_metadata["EAPI"]) or \
-                               installed_eapi != live_metadata["EAPI"]:
+                       # Use the metadata from the installed instance if the EAPI
+                       # of either instance is unsupported, since if the installed
+                       # instance has an unsupported or corrupt EAPI then we don't
+                       # want to attempt to do complex operations such as execute
+                       # pkg_config, pkg_prerm or pkg_postrm phases. If both EAPIs
+                       # are supported then go ahead and use the live_metadata, in
+                       # order to respect dep updates without revision bump or EAPI
+                       # bump, as in bug #368725.
+                       if not (portage.eapi_is_supported(live_metadata["EAPI"]) and \
+                               portage.eapi_is_supported(installed_eapi)):
                                raise KeyError(pkg)
                        self.dbapi.aux_update(pkg, live_metadata)
                except (KeyError, portage.exception.PortageException):