[yum-git] yum/__init__.py yum/rpmsack.py
James Antill
james at linux.duke.edu
Tue Mar 25 22:57:09 UTC 2008
yum/__init__.py | 2 +-
yum/rpmsack.py | 39 ++++++++++++++++++++++++++++++++++++++-
2 files changed, 39 insertions(+), 2 deletions(-)
New commits:
commit 3cae57427bbe93681140f6d11f983905a4c04c97
Author: James Antill <james at and.org>
Date: Tue Mar 25 18:56:34 2008 -0400
Push pkg matching down to rpmsack, roughly 0.3 and 15MB better for list
diff --git a/yum/__init__.py b/yum/__init__.py
index 600d7f1..b6433d7 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -1306,7 +1306,7 @@ class YumBase(depsolve.Depsolve):
# list all packages - those installed and available, don't 'think about it'
if pkgnarrow == 'all':
dinst = {}
- for po in self.rpmdb:
+ for po in self.rpmdb.returnPackages(patterns=patterns):
dinst[po.pkgtup] = po;
installed = dinst.values()
diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index a839daa..07b62f5 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -24,6 +24,10 @@ import Errors
from packages import YumInstalledPackage
from packageSack import PackageSackBase
+# For returnPackages(patterns=)
+import fnmatch
+import re
+
class RPMInstalledPackage(YumInstalledPackage):
def __init__(self, rpmhdr, index, rpmdb):
@@ -235,10 +239,43 @@ class RPMDBPackageSack(PackageSackBase):
return misc.newestInList(allpkgs)
+ @staticmethod
+ def _compile_patterns(patterns):
+ if patterns is None:
+ return None
+ ret = []
+ for pat in patterns:
+ ret.append(re.compile(fnmatch.translate(pat)))
+ return ret
+ @staticmethod
+ def _match_repattern(repatterns, hdr):
+ if repatterns is None:
+ return True
+ for repat in repatterns:
+ if repat.match(hdr['name']):
+ return True
+ if repat.match("%(name)s-%(version)s-%(release)s.%(arch)s" % hdr):
+ return True
+ if repat.match("%(name)s.%(arch)s" % hdr):
+ return True
+ if repat.match("%(name)s-%(version)s" % hdr):
+ return True
+ if repat.match("%(name)s-%(version)s-%(release)s" % hdr):
+ return True
+ if repat.match("%(epoch)s:%(name)s-%(version)s-%(release)s.%(arch)s"
+ % hdr):
+ return True
+ if repat.match("%(name)s-%(epoch)s:%(version)s-%(release)s.%(arch)s"
+ % hdr):
+ return True
+ return False
+
def returnPackages(self, repoid=None, patterns=None):
if not self._completely_loaded:
+ rpats = self._compile_patterns(patterns)
for hdr, idx in self._all_packages():
- self._makePackageObject(hdr, idx)
+ if self._match_repattern(rpats, hdr):
+ self._makePackageObject(hdr, idx)
self._completely_loaded = True
return self._idx2pkg.values()
More information about the Yum-cvs-commits
mailing list