[yum-cvs] yum/yum storagefactory.py, NONE, 1.1.2.1 __init__.py, 1.196.2.7, 1.196.2.8 repos.py, 1.90.2.1, 1.90.2.2

Tambet Ingo tambet at linux.duke.edu
Wed May 24 14:15:51 UTC 2006


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

Modified Files:
      Tag: yum-2_6_X
	__init__.py repos.py 
Added Files:
      Tag: yum-2_6_X
	storagefactory.py 
Log Message:
2006-05-24  Tambet Ingo  <tambet at ximian.com>

	* yum/storagefactory.py: Implement. Chooses the fastest
	available cache.

	* yum/repos.py: Remove the cache choosing and creation from
	here and move it to storagefactory.py.

	* yum/__init__.py: Log the storage being used.



--- NEW FILE storagefactory.py ---
#!/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.196.2.7
retrieving revision 1.196.2.8
diff -u -r1.196.2.7 -r1.196.2.8
--- __init__.py	24 May 2006 07:05:02 -0000	1.196.2.7
+++ __init__.py	24 May 2006 14:15:49 -0000	1.196.2.8
@@ -61,8 +61,7 @@
         depsolve.Depsolve.__init__(self)
         self.localdbimported = 0
         self.repos = repos.RepoStorage() # class of repositories
-        if (not self.repos.sqlite):
-            self.log(1,"Warning, could not load sqlite, falling back to pickle")
+        self.log(1, "Using %s storage" % self.repos.storage.Name())
 
         # Start with plugins disabled
         self.disablePlugins()

Index: repos.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/repos.py,v
retrieving revision 1.90.2.1
retrieving revision 1.90.2.2
diff -u -r1.90.2.1 -r1.90.2.2
--- repos.py	19 Apr 2006 14:59:37 -0000	1.90.2.1
+++ repos.py	24 May 2006 14:15:49 -0000	1.90.2.2
@@ -32,6 +32,7 @@
 from packages import YumAvailablePackage
 import mdcache
 import parser
+import storagefactory
 
 _is_fnmatch_pattern = re.compile(r"[*?[]").search
 
@@ -95,27 +96,9 @@
                         # of repo options/misc data
         self.callback = None # progress callback used for populateSack() for importing the xml files
         self.cache = 0
-        # 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._selectSackType()
+        self.storage = storagefactory.GetStorage()
+        self.pkgSack = self.storage.GetPackageSack()
     
-    def _selectSackType(self):
-
-        if (self.sqlite):
-            import sqlitecache
-            import sqlitesack
-            self.pkgSack = sqlitesack.YumSqlitePackageSack(sqlitesack.YumAvailablePackageSqlite)
-        else:
-            self.pkgSack = YumPackageSack(YumAvailablePackage)
-        
     def __str__(self):
         return str(self.repos.keys())
     
@@ -267,17 +250,12 @@
          
         for repo in myrepos:
             if not hasattr(repo, 'cacheHandler'):
-                if (self.sqlite):
-                    repo.cacheHandler = self.sqlitecache.RepodataParserSqlite(
-                            storedir=repo.cachedir, 
-                            repoid=repo.id,
-                            callback=callback,
-                            )
-                else:
-                    repo.cacheHandler = mdcache.RepodataParser(
-                            storedir=repo.cachedir, 
-                            callback=callback
-                            )
+                repo.cacheHandler = self.storage.GetCacheHandler(
+                    storedir=repo.cachedir,
+                    repoid=repo.id,
+                    callback=callback,
+                    )
+
             for item in data:
                 if self.pkgSack.added.has_key(repo.id):
                     if item in self.pkgSack.added[repo.id]:




More information about the Yum-cvs-commits mailing list