[yum-commits] Branch 'yum-3_2_X' - yum/rpmsack.py

James Antill james at osuosl.org
Tue Oct 26 14:47:22 UTC 2010


 yum/rpmsack.py |   15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

New commits:
commit 634f4c6e98e86315f55d15e7f6f5a39b4cfc8e69
Author: James Antill <james at and.org>
Date:   Tue Oct 26 09:36:51 2010 -0400

    Be more defensive in dropCachedDataPostTransaction()

diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index 6d6bf1c..25a6079 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -282,18 +282,24 @@ class RPMDBPackageSack(PackageSackBase):
         rpmdbfname  = self.root + "/var/lib/rpm/Packages"
         self._cached_rpmdb_mtime = os.path.getmtime(rpmdbfname)
 
+        def _safe_del(x, y):
+            """ Make sure we never traceback here, because it screws our yumdb
+                if we do. """
+            # Maybe use x.pop(y, None) ?
+            if y in x:
+                del x[y]
+
         precache = []
         for txmbr in txmbrs:
             self._pkgnames_loaded.discard(txmbr.name)
-            if txmbr.name in self._name2pkg:
-                del self._name2pkg[txmbr.name]
+            _safe_del(self._name2pkg, txmbr.name)
 
             if txmbr.output_state in constants.TS_INSTALL_STATES:
                 self._pkgname_fails.discard(txmbr.name)
                 precache.append(txmbr)
             if txmbr.output_state in constants.TS_REMOVE_STATES:
-                del self._idx2pkg[txmbr.po.idx]
-                del self._tup2pkg[txmbr.pkgtup]
+                _safe_del(self._idx2pkg, txmbr.po.idx)
+                _safe_del(self._tup2pkg, txmbr.pkgtup)
 
         for txmbr in precache:
             (n, a, e, v, r) = txmbr.pkgtup
@@ -301,6 +307,7 @@ class RPMDBPackageSack(PackageSackBase):
             if not pkg:
                 # Wibble?
                 self._deal_with_bad_rpmdbcache("dCDPT(pkg checksums)")
+                continue
 
             pkg = pkg[0]
             csum = txmbr.po.returnIdSum()


More information about the Yum-commits mailing list