]> git.ipfire.org Git - people/ms/pakfire.git/blobdiff - python/pakfire/packages/installed.py
database: Save installed package size.
[people/ms/pakfire.git] / python / pakfire / packages / installed.py
index ba7cbab7663992662d6f948e7b2f740b8ad1cf70..e216459c7c8eb01f4e42d1afc4d87348d7247741 100644 (file)
@@ -39,6 +39,7 @@ class DatabasePackage(Package):
                self.db = db
 
                self._data = {}
+               self._filelist = None
 
                for key in data.keys():
                        self._data[key] = data[key]
@@ -140,24 +141,48 @@ class DatabasePackage(Package):
 
        @property
        def inst_size(self):
-               # XXX to be done
-               return 0
+               inst_size = self.metadata.get("inst_size", None)
+
+               # As install size has not always been saved in the database
+               # use the package size instead.
+               if inst_size is None:
+                       return self.size
+
+               return inst_size
 
        @property
        def provides(self):
-               return self.metadata.get("provides", "").split()
+               return self.metadata.get("provides", "").splitlines()
 
        @property
        def requires(self):
-               return self.metadata.get("requires", "").split()
+               return self.metadata.get("requires", "").splitlines()
 
        @property
        def conflicts(self):
-               return self.metadata.get("conflicts", "").split()
+               return self.metadata.get("conflicts", "").splitlines()
 
        @property
        def obsoletes(self):
-               return self.metadata.get("obsoletes", "").split()
+               return self.metadata.get("obsoletes", "").splitlines()
+
+       @property
+       def recommends(self):
+               recommends = self.metadata.get("recommends", None)
+
+               if recommends:
+                       return recommends.splitlines()
+
+               return []
+
+       @property
+       def suggests(self):
+               suggests = self.metadata.get("suggests", None)
+
+               if suggests:
+                       return suggests.splitlines()
+
+               return []
 
        @property
        def hash1(self):
@@ -169,20 +194,21 @@ class DatabasePackage(Package):
 
        @property
        def filename(self):
-               return self.metadata.get("filename") # XXX basename?
+               return self.metadata.get("filename")
 
        @property
        def filelist(self):
-               filelist = []
+               if self._filelist is None:
+                       self._filelist = []
 
-               c = self.db.cursor()
-               c.execute("SELECT id FROM files WHERE pkg = ?", (self.id,))
+                       c = self.db.cursor()
+                       c.execute("SELECT * FROM files WHERE pkg = ?", (self.id,))
 
-               for id in c:
-                       file = pakfire.filelist.FileDatabase(self.pakfire, self.db, id[0])
-                       filelist.append(file)
+                       for row in c.fetchall():
+                               file = pakfire.filelist.FileDatabase(self.pakfire, self.db, row["id"], row)
+                               self._filelist.append(file)
 
-               return filelist
+               return self._filelist
 
        @property
        def configfiles(self):
@@ -196,6 +222,18 @@ class DatabasePackage(Package):
 
                return ret
 
+       @property
+       def datafiles(self):
+               ret = []
+
+               for file in self.filelist:
+                       if not file.is_datafile():
+                               continue
+
+                       ret.append(file)
+
+               return ret
+
        def _does_provide_file(self, requires):
                """
                        A faster version to find a file in the database.
@@ -298,6 +336,11 @@ class DatabasePackage(Package):
 
                self._remove_files(remove_files, message, prefix)
 
+       @property
+       def signatures(self):
+               # Database packages do not have any signatures.
+               return []
+
 
 # XXX maybe we can remove this later?
 class InstalledPackage(DatabasePackage):