self.db = db
self._data = {}
+ self._filelist = None
for key in data.keys():
self._data[key] = data[key]
def build_id(self):
return self.metadata.get("build_id")
+ @property
+ def vendor(self):
+ return self.metadata.get("vendor")
+
@property
def uuid(self):
return self.metadata.get("uuid")
@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):
@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):
- return [] # XXX to be done
+ ret = []
+
+ for file in self.filelist:
+ if not file.is_config():
+ continue
+
+ ret.append(file)
+
+ 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):
"""
# Fetch the whole filelist of the system from the database and create
# a diff. Exclude files from this package - of course.
- c.execute("SELECT name FROM files WHERE pkg != ?", (self.id,))
+ c.execute("SELECT DISTINCT name FROM files WHERE pkg != ?", (self.id,))
+ installed_files = set()
for row in c:
- # Check if file in filelist.
- if row["name"] in files:
- files.remove(row["name"])
-
+ installed_files.add(row["name"])
c.close()
- self._remove_files(files, message, prefix)
+ # List with files to be removed.
+ remove_files = []
+
+ for f in files:
+ if f.name in installed_files:
+ continue
+
+ remove_files.append(f)
+
+ 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?