[yum-git] yum/sqlitesack.py

James Antill james at linux.duke.edu
Tue Jan 22 16:37:23 UTC 2008


 yum/sqlitesack.py |   14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

New commits:
commit 9ef5296f21fdeaa56d067be9b66b5bf5114eb5c9
Author: James Antill <james at and.org>
Date:   Tue Dec 18 17:07:43 2007 -0500

     Use a reverse prco dict to drop memory (32MB for a full F8 install).
     Use weakref so we shouldn't gain any memory due to the cache.

diff --git a/yum/sqlitesack.py b/yum/sqlitesack.py
index aa23a21..cab5366 100644
--- a/yum/sqlitesack.py
+++ b/yum/sqlitesack.py
@@ -32,6 +32,7 @@ import misc
 from sqlutils import executeSQL
 import rpmUtils.miscutils
 import sqlutils
+from weakref import WeakValueDictionary
 
 def catchSqliteException(func):
     """This decorator converts sqlite exceptions into RepoError"""
@@ -46,6 +47,7 @@ def catchSqliteException(func):
     newFunc.__dict__.update(func.__dict__)
     return newFunc
 
+_reverse_prco = WeakValueDictionary() # So pacakges can share prco data
 class YumAvailablePackageSqlite(YumAvailablePackage, PackageObject, RpmBase):
     def __init__(self, repo, db_obj):
         self.prco = { 'obsoletes': (),
@@ -209,9 +211,15 @@ class YumAvailablePackageSqlite(YumAvailablePackage, PackageObject, RpmBase):
             executeSQL(cur, query)
             self.prco[prcotype] = [ ]
             for ob in cur:
-                self.prco[prcotype].append((ob['name'], ob['flags'],
-                                           (ob['epoch'], ob['version'], 
-                                            ob['release'])))
+                prco_set = (ob['name'], ob['flags'], 
+                            (ob['epoch'], ob['version'], ob['release']))
+                # This saves memory by merging the prco data from multiple
+                # packages. Note that flags etc. need to be the same too.
+                if prco_set in _reverse_prco:
+                    prco_set = _reverse_prco[prco_set]
+                else:
+                    _reverse_prco[prco_set] = prco_set
+                self.prco[prcotype].append(prco_set)
 
         return RpmBase.returnPrco(self, prcotype, printable)
 



More information about the Yum-cvs-commits mailing list