[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