[yum-commits] Branch 'yum-3_2_X' - yum/rpmsack.py

skvidal at osuosl.org skvidal at osuosl.org
Tue Mar 31 21:40:59 UTC 2009


 yum/rpmsack.py |   38 ++++++++++++++++++++++++++------------
 1 file changed, 26 insertions(+), 12 deletions(-)

New commits:
commit a8bfb56e373b30db1f9eb6e5c0666c0768cc6720
Author: Seth Vidal <skvidal at fedoraproject.org>
Date:   Tue Mar 31 17:39:03 2009 -0400

    - add __iter__ function and make sure no one plays silly-buggers with attribute names
    - also deal with @$%(*&%$ pkgnames which are a single char

diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index 06ad278..ae5bef1 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -669,29 +669,32 @@ class RPMDBAdditionalData(object):
             pkgid = os.path.basename(d).split('-')[0]
             self._packages[pkgid] = d
 
-    def _get_dir_name(self, po):
-        if po.pkgid in self._packages:
-            return self._packages[po.pkgid]
-        thisdir = '%s/%s/%s/%s-%s-%s-%s-%s' % (self.conf.db_path, po.name[0], 
-                              po.name[1], po.pkgid, po.name, po.ver, 
-                              po.rel, po.arch)
-        self._packages[po.pkgid] = thisdir
+    def _get_dir_name(self, pkgtup, pkgid):
+        if pkgid in self._packages:
+            return self._packages[pkgid]
+        (n, a, e, v,r) = pkgtup
+        thisdir = '%s/%s/%s-%s-%s-%s-%s' % (self.conf.db_path,
+                                            n[0], pkgid, n, v, r, a)
+        self._packages[pkgid] = thisdir
         return thisdir
 
-    def get_package(self, po):
+    def get_package(self, po=None, pkgtup=None, pkgid=None):
         """Return an RPMDBAdditionalDataPackage Object for this package"""
-        thisdir = self._get_dir_name(po)
-        return RPMDBAdditionalDataPackage(self.conf, po, thisdir)
+        if po:
+            thisdir = self._get_dir_name(po.pkgtup, po.pkgid)
+        elif pkgtup and pkgid:
+            thisdir = self._get_dir_name(pkgtup, pkgid)
         
+        return RPMDBAdditionalDataPackage(self.conf, thisdir)
+
     def sync_with_rpmdb(self, rpmdbobj):
         """populate out the dirs and remove all the items no longer in the rpmdb
            and/or populate various bits to the currently installed version"""
         pass
 
 class RPMDBAdditionalDataPackage(object):
-    def __init__(self, conf, po, pkgdir):
+    def __init__(self, conf, pkgdir):
         self._conf = conf
-        self._po = po
         self._mydir = pkgdir
         # FIXME needs some intelligent caching beyond the FS cache
 
@@ -700,6 +703,8 @@ class RPMDBAdditionalDataPackage(object):
         if not os.path.exists(self._mydir):
             os.makedirs(self._mydir)
         
+        attr = attr.replace('/', '')
+        attr = attr.replace('~', '')
         fn = self._mydir + '/' + attr
         fn = os.path.normpath(fn)
         fo = open(fn, 'w')
@@ -714,6 +719,8 @@ class RPMDBAdditionalDataPackage(object):
         del fn
     
     def _read(self, attr):
+        attr = attr.replace('/', '')
+        attr = attr.replace('~', '')
         fn = self._mydir + '/' + attr
         if not os.path.exists(fn):
             raise AttributeError, "%s has no attribute %s" % (self, attr)
@@ -753,6 +760,13 @@ class RPMDBAdditionalDataPackage(object):
         else:
             object.__delattr__(self, attr)
 
+    def __iter__(self):
+        items = glob.glob(self._mydir + '/*')
+        return [ item.replace(self._mydir + '/', '') for item in items].__iter__()
+
+#    def __dir__(self): # for 2.6 and beyond, apparently
+#        return list(self.__iter__()) + self.__dict__.keys()
+
     def get(self, attr, default=None):
         """retrieve an add'l data obj"""
 


More information about the Yum-commits mailing list