[yum-cvs] yum/yum rpmsack.py,1.45,1.46

Jeremy Katz katzj at linux.duke.edu
Thu Apr 26 15:30:16 UTC 2007


Update of /home/groups/yum/cvs/yum/yum
In directory login1.linux.duke.edu:/tmp/cvs-serv18805/yum

Modified Files:
	rpmsack.py 
Log Message:
reduce overhead of rpmack._search (Florian Festi)


Index: rpmsack.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/rpmsack.py,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -r1.45 -r1.46
--- rpmsack.py	17 Apr 2007 20:32:28 -0000	1.45
+++ rpmsack.py	26 Apr 2007 15:30:14 -0000	1.46
@@ -47,6 +47,7 @@
     def __init__(self, root='/'):
         self.root = root
         self._header_dict = {}
+        self._header_by_name = {}
         self.ts = None
         
     def _get_pkglist(self):
@@ -241,7 +242,8 @@
         for (hdr, idx) in self._all_packages():
             pkgtup = self._hdr2pkgTuple(hdr)
             self._header_dict[pkgtup] = (hdr, idx)
-        
+            self._header_by_name.setdefault(pkgtup[0], []).append(
+                (pkgtup, (hdr, idx)))
         
     def _search(self, name=None, epoch=None, ver=None, rel=None, arch=None):
         '''Generator that yield (header, pkgtup, index) for matching packages
@@ -266,7 +268,12 @@
                 hdr, idx = self._header_dict[pkgtup]
                 ret.append( (hdr, pkgtup, idx) )
         else:
-            for (pkgtup, (hdr, idx)) in self._header_dict.items():
+            if name is not None:
+                pkg_list = self._header_by_name.get(name, [ ])
+            else:
+                pkg_list = self._header_dict.items()
+                
+            for (pkgtup, (hdr, idx)) in pkg_list:
                 ok = True
                 for thisindex, val in lookfor:
                     if pkgtup[thisindex] != val:




More information about the Yum-cvs-commits mailing list