[yum-git] 5 commits - yum/__init__.py yum/misc.py yum/packageSack.py yum/packages.py yum/rpmsack.py yum/sqlitesack.py yum/yumRepo.py
James Antill
james at linux.duke.edu
Wed Mar 26 14:08:50 UTC 2008
yum/__init__.py | 4 +++-
yum/misc.py | 5 +++++
yum/packageSack.py | 3 ++-
yum/packages.py | 31 ++++++++++++++++++-------------
yum/rpmsack.py | 8 ++++++++
yum/sqlitesack.py | 12 +++++-------
yum/yumRepo.py | 1 +
7 files changed, 42 insertions(+), 22 deletions(-)
New commits:
commit c81a339b7c861954f69c5f991b029cb6dd60f1bb
Author: James Antill <james at and.org>
Date: Wed Mar 26 10:08:32 2008 -0400
Warn users when their MD is being updated
diff --git a/yum/yumRepo.py b/yum/yumRepo.py
index 1ec69ea..22fcde3 100644
--- a/yum/yumRepo.py
+++ b/yum/yumRepo.py
@@ -878,6 +878,7 @@ class YumRepository(Repository, config.RepoConf):
if omdtype == nmdtype and olddata.checksum == newdata.checksum:
continue
if olddata.timestamp > newdata.timestamp:
+ logger.warning(_("Not using downloaded repomd.xml because it is older than what we have"))
return False
return True
commit ae78446d9d6f275e70bf1aaf1fbc507e56b09aa1
Author: James Antill <james at and.org>
Date: Tue Mar 25 20:53:14 2008 -0400
Generalize sqlite's share_data, saves 9MB 5% RSS on Fed-8 => rawhide
diff --git a/yum/misc.py b/yum/misc.py
index 9447f90..44f85d4 100644
--- a/yum/misc.py
+++ b/yum/misc.py
@@ -20,6 +20,11 @@ import gpgme
from Errors import MiscError
+_share_data_store = {}
+def share_data(value):
+ """ Take a value and use the same value from the store,
+ if the value isn't in the store this one becomes the shared version. """
+ return _share_data_store.setdefault(value, value)
_re_compiled_glob_match = None
def re_glob(s):
diff --git a/yum/packages.py b/yum/packages.py
index 6246c2a..1606e93 100644
--- a/yum/packages.py
+++ b/yum/packages.py
@@ -705,16 +705,16 @@ class YumHeaderPackage(YumAvailablePackage):
YumAvailablePackage.__init__(self, repo)
self.hdr = hdr
- self.name = self.hdr['name']
- self.arch = self.hdr['arch']
- self.epoch = self.doepoch()
- self.version = self.hdr['version']
- self.release = self.hdr['release']
+ self.name = misc.share_data(self.hdr['name'])
+ self.arch = misc.share_data(self.hdr['arch'])
+ self.epoch = misc.share_data(self.doepoch())
+ self.version = misc.share_data(self.hdr['version'])
+ self.release = misc.share_data(self.hdr['release'])
self.ver = self.version
self.rel = self.release
self.pkgtup = (self.name, self.arch, self.epoch, self.version, self.release)
- self.summary = self.hdr['summary'].replace('\n', '')
- self.description = self.hdr['description']
+ self.summary = misc.share_data(self.hdr['summary'].replace('\n', ''))
+ self.description = misc.share_data(self.hdr['description'])
self.pkgid = self.hdr[rpm.RPMTAG_SHA1HEADER]
if not self.pkgid:
self.pkgid = "%s.%s" %(self.hdr['name'], self.hdr['buildtime'])
@@ -743,23 +743,28 @@ class YumHeaderPackage(YumAvailablePackage):
def _populatePrco(self):
"Populate the package object with the needed PRCO interface."
- tag2prco = { "OBSOLETE": "obsoletes",
- "CONFLICT": "conflicts",
- "REQUIRE": "requires",
- "PROVIDE": "provides" }
+ tag2prco = { "OBSOLETE": misc.share_data("obsoletes"),
+ "CONFLICT": misc.share_data("conflicts"),
+ "REQUIRE": misc.share_data("requires"),
+ "PROVIDE": misc.share_data("provides") }
hdr = self._get_hdr()
for tag in tag2prco:
name = hdr[getattr(rpm, 'RPMTAG_%sNAME' % tag)]
+ name = map(misc.share_data, name)
+ if name is None:
+ continue
lst = hdr[getattr(rpm, 'RPMTAG_%sFLAGS' % tag)]
flag = map(rpmUtils.miscutils.flagToString, lst)
+ flag = map(misc.share_data, flag)
lst = hdr[getattr(rpm, 'RPMTAG_%sVERSION' % tag)]
vers = map(rpmUtils.miscutils.stringToVersion, lst)
+ vers = map(lambda x: (misc.share_data(x[0]), misc.share_data(x[1]),
+ misc.share_data(x[2])), vers)
prcotype = tag2prco[tag]
- if name is not None:
- self.prco[prcotype] = zip(name, flag, vers)
+ self.prco[prcotype] = map(misc.share_data, zip(name,flag,vers))
def tagByName(self, tag):
warnings.warn("tagByName() will go away in a furture version of Yum.\n",
diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index 3ebb246..3c82723 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -120,6 +120,7 @@ class RPMDBPackageSack(PackageSackBase):
self._tup2pkg = {}
self._completely_loaded = False
self._simple_pkgtup_list = []
+ misc._share_data_store = {}
def readOnlyTS(self):
if not self.ts:
diff --git a/yum/sqlitesack.py b/yum/sqlitesack.py
index a58c8f0..be34cdc 100644
--- a/yum/sqlitesack.py
+++ b/yum/sqlitesack.py
@@ -45,11 +45,8 @@ def catchSqliteException(func):
newFunc.__dict__.update(func.__dict__)
return newFunc
-_store = {}
def _share_data(value):
- """ Take a value and use the same value from the store,
- if the value isn't in the store this one becomes the shared version. """
- return _store.setdefault(value, value)
+ return misc.share_data(value)
class YumAvailablePackageSqlite(YumAvailablePackage, PackageObject, RpmBase):
def __init__(self, repo, db_obj):
@@ -137,7 +134,9 @@ class YumAvailablePackageSqlite(YumAvailablePackage, PackageObject, RpmBase):
(self.pkgId,)).fetchone()
value = r[0]
if varname in {'vendor' : 1, 'packager' : 1, 'buildhost' : 1,
- 'license' : 1, 'group' : 1}:
+ 'license' : 1, 'group' : 1,
+ 'summary' : 1, 'description' : 1, 'sourcerpm' : 1,
+ 'url' : 1}:
value = _share_data(value)
setattr(self, varname, value)
@@ -296,8 +295,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
'provides' : { },
'requires' : { },
}
- global _store
- _store = {}
+ misc._share_data_store = {}
@catchSqliteException
def close(self):
commit e3215be149c97aa7207d6e829b5d3b220b7697e6
Author: James Antill <james at and.org>
Date: Tue Mar 25 20:38:10 2008 -0400
Drop caches from rpmsack too
diff --git a/yum/__init__.py b/yum/__init__.py
index 6d810c7..cba31e7 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -626,6 +626,8 @@ class YumBase(depsolve.Depsolve):
if self.tsInfo.changed:
(rescode, restring) = self.resolveDeps()
self.tsInfo.pkgSack.dropCachedData()
+ self.pkgSack.dropCachedData()
+ self.rpmdb.dropCachedData()
# if depsolve failed and skipbroken is enabled
# The remove the broken packages from the transactions and
diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index 3a24f2f..3ebb246 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -114,6 +114,13 @@ class RPMDBPackageSack(PackageSackBase):
pkglist = property(_get_pkglist, None)
+ def dropCachedData(self):
+ self._idx2pkg = {}
+ self._name2pkg = {}
+ self._tup2pkg = {}
+ self._completely_loaded = False
+ self._simple_pkgtup_list = []
+
def readOnlyTS(self):
if not self.ts:
self.ts = initReadOnlyTransaction(root=self.root)
commit cdbc27a30326f5cbeda778d52dc52276071f91f7
Author: James Antill <james at and.org>
Date: Tue Mar 25 20:13:55 2008 -0400
Might as well make list extras faster too :)
diff --git a/yum/__init__.py b/yum/__init__.py
index bf1791a..6d810c7 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -1357,7 +1357,7 @@ class YumBase(depsolve.Depsolve):
# we must compare the installed set versus the repo set
# anything installed but not in a repo is an extra
avail = self.pkgSack.simplePkgList(patterns=patterns)
- for po in self.rpmdb:
+ for po in self.rpmdb.returnPackages(patterns=patterns):
if po.pkgtup not in avail:
extras.append(po)
commit 3612c1fa83183a245767919bec82e8d5026a186e
Author: James Antill <james at and.org>
Date: Tue Mar 25 20:13:35 2008 -0400
Minor re_glob, plus comment that matchPackageNames() function needs to die
diff --git a/yum/packageSack.py b/yum/packageSack.py
index 17e9164..975a39b 100644
--- a/yum/packageSack.py
+++ b/yum/packageSack.py
@@ -160,6 +160,7 @@ class PackageSackBase(object):
def searchAll(self, arg, query_type):
raise NotImplementedError()
+ # FIXME: This needs to be merged with how "yum list" works.
def matchPackageNames(self, pkgspecs):
"""take a list strings and match the packages in the sack against it
this will match against:
@@ -180,7 +181,7 @@ class PackageSackBase(object):
specs = {}
for p in pkgspecs:
- if re.search('[\*\[\]\{\}\?]', p):
+ if misc.re_glob(p):
restring = fnmatch.translate(p)
specs[p] = re.compile(restring)
else:
More information about the Yum-cvs-commits
mailing list