[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