From: Michael Tremer Date: Sun, 28 Oct 2012 13:45:28 +0000 (+0100) Subject: Fix installed size of packages. X-Git-Tag: 0.9.24~33 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=675f2ca0f20cbff1caadaff23f19420672a4fb4e;p=pakfire.git Fix installed size of packages. --- diff --git a/python/pakfire/packages/base.py b/python/pakfire/packages/base.py index 3cc4bb218..543f50969 100644 --- a/python/pakfire/packages/base.py +++ b/python/pakfire/packages/base.py @@ -114,6 +114,12 @@ class Package(object): if self.size: items.append((_("Size"), util.format_size(self.size))) + if self.inst_size: + items.append( + (_("Installed size"), + util.format_size(self.inst_size)) + ) + # filter dummy repository if not self.repo == self.pakfire.repos.dummy: items.append((_("Repo"), self.repo.name)) diff --git a/python/pakfire/packages/file.py b/python/pakfire/packages/file.py index cc4f9fd89..dcca26fae 100644 --- a/python/pakfire/packages/file.py +++ b/python/pakfire/packages/file.py @@ -61,7 +61,7 @@ class InnerTarFile(tarfile.TarFile): log.debug("Saving capabilities for %s: %s" % (name, caps)) tarinfo.pax_headers["PAKFIRE.capabilities"] = caps - # Append the tar header and data to the archive. + # Append the tar header and data to the archive. f = tarfile.bltn_open(name, "rb") self.addfile(tarinfo, f) f.close() @@ -76,6 +76,9 @@ class InnerTarFile(tarfile.TarFile): else: self.addfile(tarinfo) + # Return the tar information about the file + return tarinfo + def extract(self, member, path=""): target = os.path.join(path, member.name) diff --git a/python/pakfire/packages/packager.py b/python/pakfire/packages/packager.py index 5172a6610..7814fbbed 100644 --- a/python/pakfire/packages/packager.py +++ b/python/pakfire/packages/packager.py @@ -197,21 +197,22 @@ class Packager(object): def run(self): raise NotImplementedError - def getsize(self, filename): - if tarfile.is_tarfile(filename): - return os.path.getsize(filename) - + def getsize(self, datafile): size = 0 - f = lzma.LZMAFile(filename) + + if self.payload_compression == "xz": + tar = InnerTarFileXz.open(datafile) + else: + tar = InnerTarFile.open(datafile) while True: - buf = f.read(BUFFER_SIZE) - if not buf: + m = tar.next() + if not m: break - size += len(buf) - f.close() + size += m.size + tar.close() return size diff --git a/python/pakfire/packages/solv.py b/python/pakfire/packages/solv.py index 80a30c259..85bf487c5 100644 --- a/python/pakfire/packages/solv.py +++ b/python/pakfire/packages/solv.py @@ -121,6 +121,10 @@ class SolvPackage(base.Package): def size(self): return self.solvable.get_downloadsize() + @property + def inst_size(self): + return self.solvable.get_installsize() + @property def vendor(self): vendor = self.solvable.get_vendor()