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

James Antill james at osuosl.org
Fri Oct 15 18:58:53 UTC 2010


 yum/rpmsack.py         |   31 ++++++++++++++++++++-----------
 yum/transactioninfo.py |    4 +++-
 2 files changed, 23 insertions(+), 12 deletions(-)

New commits:
commit 42009d48216f6d53e2e920187a8009b7c04d1f7b
Author: James Antill <james at and.org>
Date:   Fri Oct 15 09:18:26 2010 -0400

    Fix our pkgtup+checksum cache to save every pkgtup, so we don't lose pkgs.

diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index 1f44706..ae64fa6 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -625,7 +625,7 @@ class RPMDBPackageSack(PackageSackBase):
         misc.unlink_f(self._cachedir + "/version")
         misc.unlink_f(self._cachedir + '/conflicts')
         misc.unlink_f(self._cachedir + '/file-requires')
-        misc.unlink_f(self._cachedir + '/yumdb-package-checksums')
+        misc.unlink_f(self._cachedir + '/pkgtups-checksums')
         #  We have a couple of options here, we can:
         #
         # . Ignore it and continue - least invasive, least likely to get any
@@ -709,8 +709,8 @@ class RPMDBPackageSack(PackageSackBase):
             data = self._trans_cache_store['file-requires']
             self._write_file_requires(rpmdbv, data)
 
-        if 'yumdb-package-checksums' in self._trans_cache_store:
-            data = self._trans_cache_store['yumdb-package-checksums']
+        if 'pkgtups-checksums' in self._trans_cache_store:
+            data = self._trans_cache_store['pkgtups-checksums']
             self._write_package_checksums(rpmdbv, data)
 
         self._trans_cache_store = {}
@@ -889,18 +889,19 @@ class RPMDBPackageSack(PackageSackBase):
         """ As simpleVersion() et. al. requires it, we "cache" this yumdb data
             as part of our rpmdb cache. We cache it with rpmdb data, even
             though someone _could_ use yumdb to alter it without changing the
-            rpmdb ... don't do that. """
+            rpmdb ... don't do that.
+            NOTE: This is also used as a cache of pkgtups in the rpmdb. """
         if not self.__cache_rpmdb__:
             return
 
-        if not os.path.exists(self._cachedir + '/yumdb-package-checksums'):
+        if not os.path.exists(self._cachedir + '/pkgtups-checksums'):
             return
 
         def _read_str(fo):
             return fo.readline()[:-1]
 
         rpmdbv = self.simpleVersion(main_only=True)[0]
-        fo = open(self._cachedir + '/yumdb-package-checksums')
+        fo = open(self._cachedir + '/pkgtups-checksums')
         frpmdbv = fo.readline()
         if not frpmdbv or rpmdbv != frpmdbv[:-1]:
             return
@@ -919,7 +920,10 @@ class RPMDBPackageSack(PackageSackBase):
 
                 T = _read_str(fo)
                 D = _read_str(fo)
-                checksum_data[pkgtup] = (T, D)
+                if T == '-':
+                    checksum_data[pkgtup] = None
+                else:
+                    checksum_data[pkgtup] = (T, D)
 
             if fo.readline() != '': # Should be EOF
                 return
@@ -931,6 +935,9 @@ class RPMDBPackageSack(PackageSackBase):
              return checksum_data
 
         for pkgtup in checksum_data:
+            if checksum_data[pkgtup] is None:
+                continue
+
             (n, a, e, v, r) = pkgtup
             pkg = self.searchNevra(n, e, v, r, a)
             if not pkg:
@@ -948,24 +955,26 @@ class RPMDBPackageSack(PackageSackBase):
         if not self.__cache_rpmdb__:
             return
 
-        self._trans_cache_store['yumdb-package-checksums'] = pkg_checksum_tups
+        self._trans_cache_store['pkgtups-checksums'] = pkg_checksum_tups
 
     def _write_package_checksums(self, rpmdbversion, data):
         if not os.access(self._cachedir, os.W_OK):
             return
 
         pkg_checksum_tups = data
-        fo = open(self._cachedir + '/yumdb-package-checksums.tmp', 'w')
+        fo = open(self._cachedir + '/pkgtups-checksums.tmp', 'w')
         fo.write("%s\n" % rpmdbversion)
         fo.write("%u\n" % len(pkg_checksum_tups))
         for pkgtup, TD in sorted(pkg_checksum_tups):
             for var in pkgtup:
                 fo.write("%s\n" % var)
+            if TD is None:
+                TD = ('-', '-')
             for var in TD:
                 fo.write("%s\n" % var)
         fo.close()
-        os.rename(self._cachedir + '/yumdb-package-checksums.tmp',
-                  self._cachedir + '/yumdb-package-checksums')
+        os.rename(self._cachedir + '/pkgtups-checksums.tmp',
+                  self._cachedir + '/pkgtups-checksums')
 
     def _get_cached_simpleVersion_main(self):
         """ Return the cached string of the main rpmdbv. """
diff --git a/yum/transactioninfo.py b/yum/transactioninfo.py
index f34a45e..6cf400a 100644
--- a/yum/transactioninfo.py
+++ b/yum/transactioninfo.py
@@ -646,7 +646,9 @@ class TransactionData:
             csum = None
             if 'checksum_type' in ydbi and 'checksum_data' in ydbi:
                 csum = (ydbi.checksum_type, ydbi.checksum_data)
-                pkg_checksum_tups.append((pkg.pkgtup, csum))
+            #  We need all the pkgtups, so we even save the ones without a
+            # checksum.
+            pkg_checksum_tups.append((pkg.pkgtup, csum))
             main.update(pkg, csum)
 
         self.rpmdb.transactionCachePackageChecksums(pkg_checksum_tups)


More information about the Yum-commits mailing list