[yum-cvs] yum/yum packages.py,1.60,1.61 sqlitesack.py,1.43,1.44

Seth Vidal skvidal at linux.duke.edu
Sat Sep 2 01:16:32 UTC 2006


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

Modified Files:
	packages.py sqlitesack.py 
Log Message:

- properties do not behave like other subclassable items - which sucks
- add filelists, dirlists and ghostlist property attributes to all package objects


Index: packages.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/packages.py,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -r1.60 -r1.61
--- packages.py	29 Aug 2006 15:51:03 -0000	1.60
+++ packages.py	2 Sep 2006 01:16:30 -0000	1.61
@@ -22,6 +22,7 @@
 import re
 import types
 import fnmatch
+import stat
 from rpmUtils import RpmUtilsError
 import rpmUtils.arch
 import rpmUtils.miscutils
@@ -271,16 +272,26 @@
     def returnFileEntries(self, ftype='file'):
         """return list of files based on type"""
         # fixme - maybe should die - use direct access to attribute
-        if self.files.has_key(ftype):
-            return self.files[ftype]
-        else:
-            return []
+        if self.files:
+            if self.files.has_key(ftype):
+                return self.files[ftype]
+        return []
             
     def returnFileTypes(self):
         """return list of types of files in the package"""
         # maybe should die - use direct access to attribute
         return self.files.keys()
     
+    def returnDirEntries(self):
+        return self.returnFileEntries(ftype='dir')
+    
+    def returnGhostEntries(self):
+        return self.returnFileEntries(ftype='ghost')
+
+    filelists = property(returnFileEntries)
+    dirlists = property(returnDirEntries)
+    ghostlists = property(returnGhostEntries)
+    
 
 class YumAvailablePackage(PackageObject, RpmBase):
     """derived class for the  packageobject and RpmBase packageobject yum
@@ -349,6 +360,7 @@
     conflicts = property(_conflicts)
     providesnames = property(getProvidesNames)
     
+    
     def _size(self):
         return self.returnSimple('packagesize')
     
@@ -426,7 +438,7 @@
         
         return reqlist
     
-    
+
     
     def importFromDict(self, pkgdict):
         """handles an mdCache package dictionary item to populate out 
@@ -535,7 +547,8 @@
         self.description = self.tagByName('description')
         self.pkgid = self.tagByName(rpm.RPMTAG_SHA1HEADER)
         self.size = self.tagByName('size')
-
+        self.__loadedfiles = False
+        self.__mode_cache = {}
         self._populatePrco()
         
     def __str__(self):
@@ -590,8 +603,50 @@
 
     def returnLocalHeader(self):
         return self.hdr
+    
 
-
+    def _loadFiles(self):
+        files = self.tagByName('filenames')
+        fileflags = self.tagByName('fileflags')
+        filemodes = self.tagByName('filemodes')
+        filetuple = zip(files, filemodes, fileflags)
+        if not self.__loadedfiles:
+            for (file, mode, flag) in filetuple:
+                #garbage checks
+                if mode is None or mode == '':
+                    if not self.files.has_key('file'):
+                        self.files['file'] = []
+                    self.files['file'].append(file)
+                    continue
+                if not self.__mode_cache.has_key(mode):
+                    self.__mode_cache[mode] = stat.S_ISDIR(mode)
+          
+                if self.__mode_cache[mode]:
+                    if not self.files.has_key('dir'):
+                        self.files['dir'] = []
+                    self.files['dir'].append(file)
+                else:
+                    if flag is None:
+                        if not self.files.has_key('file'):
+                            self.files['file'] = []
+                        self.files['file'].append(file)
+                    else:
+                        if (flag & 64):
+                            if not self.files.has_key('ghost'):
+                                self.files['ghost'] = []
+                            self.files['ghost'].append(file)
+                            continue
+                        if not self.files.has_key('file'):
+                            self.files['file'] = []
+                        self.files['file'].append(file)
+            self.__loadedfiles = True
+            
+    def returnFileEntries(self, ftype='file'):
+        """return list of files based on type"""
+        self._loadFiles()
+        return YumAvailablePackage.returnFileEntries(self,ftype)
+    
+    filelists = property(returnFileEntries)
 
 class YumInstalledPackage(YumHeaderPackage):
     """super class for dealing with packages in the rpmdb"""

Index: sqlitesack.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/sqlitesack.py,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -r1.43 -r1.44
--- sqlitesack.py	31 Aug 2006 05:11:05 -0000	1.43
+++ sqlitesack.py	2 Sep 2006 01:16:30 -0000	1.44
@@ -93,6 +93,13 @@
         if self.files is not None:
             return
         result = {}
+        
+        if not self.sack.filelistsdb.has_key(self.repoid):
+            #FIXME should this raise an exception or should it try to download
+            # the filelists.xml and import it?
+            # primarydb import of files should happen, then!
+            self.files = result
+            return
         cache = self.sack.filelistsdb[self.repoid]
         cur = cache.cursor()
         cur.execute("select filelist.dirname as dirname, "




More information about the Yum-cvs-commits mailing list