[yum-cvs] yum/yum storagefactory.py, 1.1, 1.2 __init__.py, 1.204, 1.205 packages.py, 1.45, 1.46 yumRepo.py, 1.8, 1.9

Tambet Ingo tambet at linux.duke.edu
Tue May 30 10:15:44 UTC 2006


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

Modified Files:
	__init__.py packages.py yumRepo.py 
Added Files:
	storagefactory.py 
Log Message:
2006-05-30  Tambet Ingo  <tambet at ximian.com>

	* yum/storagefactory.py: Implement. The yumRepo class got a little
	crowded with all of these "try to import _sqlitecache, sqlite, etc...".

	* yum/yumRepo.py (YumPackageSack.populate): Use repo.storage to
	get cache handler.
	(YumRepository.__init__): Use storagefactory to get package sack.

	* yum/packages.py (RpmBase.inPrcoRange): Fix the leftover
	mdUtils.compareEVR usage.

	* yum/__init__.py (YumBase.__init__): Log the used storage name.



Index: storagefactory.py
===================================================================
RCS file: storagefactory.py
diff -N storagefactory.py
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ storagefactory.py	30 May 2006 10:15:41 -0000	1.2
@@ -0,0 +1,113 @@
+#!/usr/bin/python -tt
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Library General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Copyright 2004 Duke University
+
+import repos
+import Errors
+
+class Storage:
+
+    def __init__(self):
+        pass
+
+    def Name(self):
+        pass
+
+    def GetCacheHandler(self, storedir, repoid, callback):
+        pass
+
+    def GetPackageSack(self):
+        pass
+
+class StoragePickle(Storage):
+
+    def __init__(self):
+        import packages
+        import mdcache
+
+        self.packages = packages
+        self.mdcache = mdcache
+
+    def Name(self):
+        return "pickle"
+
+    def GetCacheHandler(self, storedir, repoid, callback):
+        return self.mdcache.RepodataParser(storedir, callback)
+
+    def GetPackageSack(self):
+        return repos.YumPackageSack(self.packages.YumAvailablePackage)
+
+class StorageSqlite(Storage):
+
+    def __init__(self):
+        import sqlitecache
+        import sqlitesack
+
+        self.sqlitecache = sqlitecache
+        self.sqlitesack = sqlitesack
+
+    def Name(self):
+        return "sqlite"
+
+    def GetCacheHandler(self, storedir, repoid, callback):
+        return self.sqlitecache.RepodataParserSqlite(storedir, repoid, callback)
+
+    def GetPackageSack(self):
+        return self.sqlitesack.YumSqlitePackageSack(self.sqlitesack.YumAvailablePackageSqlite)
+
+
+class StorageSqliteC(Storage):
+    def __init__(self):
+        import sqlitecachec
+        import sqlitesack
+
+        self.sqlitecache = sqlitecachec
+        self.sqlitesack = sqlitesack
+
+    def Name(self):
+        return "sqlite-c"
+
+    def GetCacheHandler(self, storedir, repoid, callback):
+        return self.sqlitecache.RepodataParserSqlite(storedir, repoid, callback)
+
+    def GetPackageSack(self):
+        return self.sqlitesack.YumSqlitePackageSack(self.sqlitesack.YumAvailablePackageSqlite)
+
+
+def GetStorage():
+    storage = None
+
+    # Try to load storages, prefering the fastest one.
+
+    try:
+        storage = StorageSqliteC()
+        return storage
+    except:
+        pass
+
+    try:
+        storage = StorageSqlite()
+        return storage
+    except:
+        pass
+
+    try:
+        storage = StoragePickle()
+        return storage
+    except:
+        pass
+
+    raise Errors.YumBaseError, 'Could not find any working storages.'
+

Index: __init__.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/__init__.py,v
retrieving revision 1.204
retrieving revision 1.205
diff -u -r1.204 -r1.205
--- __init__.py	28 May 2006 05:32:49 -0000	1.204
+++ __init__.py	30 May 2006 10:15:41 -0000	1.205
@@ -59,9 +59,8 @@
         depsolve.Depsolve.__init__(self)
         self.localdbimported = 0
         self.repos = repos.RepoStorage() # class of repositories
-        # TODO: PAV Fix this 
-        #if (not self.repos.sqlite):
-        #    self.log(1,"Warning, could not load sqlite, falling back to pickle")
+        # TODO: PAV Fix this
+        # self.log(1, "Using %s storage" % self.repos.storage.Name())
 
         # Start with plugins disabled
         self.disablePlugins()

Index: packages.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/packages.py,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -r1.45 -r1.46
--- packages.py	28 May 2006 05:32:49 -0000	1.45
+++ packages.py	30 May 2006 10:15:41 -0000	1.46
@@ -234,7 +234,7 @@
                     e = None
                 if reqv is None: # just for the record if ver is None then we're going to segfault
                     v = None
-                rc = mdUtils.compareEVR((e, v, r), (reqe, reqv, reqr))
+                rc = rpmUtils.miscutils.compareEVR((e, v, r), (reqe, reqv, reqr))
                 
                 if rc >= 1:
                     if reqf in ['GT', 'GE', 4, 12]:

Index: yumRepo.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/yumRepo.py,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- yumRepo.py	28 May 2006 05:32:49 -0000	1.8
+++ yumRepo.py	30 May 2006 10:15:41 -0000	1.9
@@ -14,6 +14,7 @@
 from packages import YumAvailablePackage
 import parser
 import mdcache
+import storagefactory
 
 
 class YumPackageSack(packageSack.PackageSack):
@@ -74,17 +75,11 @@
             data = [ with ]
 
         if not hasattr(repo, 'cacheHandler'):
-            if (repo.sqlite):
-                repo.cacheHandler = repo.sqlitecache.RepodataParserSqlite(
-                        storedir=repo.cachedir,
-                        repoid=repo.id,
-                        callback=callback,
-                        )
-            else:
-                repo.cacheHandler = mdcache.RepodataParser(
-                        storedir=repo.cachedir,
-                        callback=callback
-                        )
+            repo.cacheHandler = repo.storage.GetCacheHandler(
+                storedir=repo.cachedir,
+                repoid=repo.id,
+                callback=callback,
+                )
         for item in data:
             if self.added.has_key(repo.id):
                 if item in self.added[repo.id]:
@@ -167,19 +162,8 @@
         self.failure_obj = None
         self.mirror_failure_obj = None
 
-        # Check to see if we can import sqlite stuff
-        try:
-            import sqlitecache
-            import sqlitesack
-        except ImportError:
-            self.sqlite = False
-        else:
-            self.sqlite = True
-            self.sqlitecache = sqlitecache
-            #self.sqlite = False
-
-        # This repository's package sack instance.
-        self.sack = self._selectSackType()
+        self.storage = storagefactory.GetStorage()
+        self.sack = self.storage.GetPackageSack()
 
 
     def __getProxyDict(self):
@@ -192,15 +176,6 @@
     # that it's actually determined for the repo)
     proxy_dict = property(__getProxyDict)
 
-    def _selectSackType(self):
-
-        if (self.sqlite):
-            import sqlitecache
-            import sqlitesack
-            return sqlitesack.YumSqlitePackageSack(sqlitesack.YumAvailablePackageSqlite)
-        else:
-            return YumPackageSack(YumAvailablePackage)
-
     def getPackageSack(self):
         """Returns the instance of this repository's package sack."""
         return self.sack




More information about the Yum-cvs-commits mailing list