From: Michael Tremer Date: Sat, 30 Jul 2011 20:53:11 +0000 (+0200) Subject: Display consumed space when running a transaction. X-Git-Tag: 0.9.4~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ee6715aa92b2f7d1f1fd577aa0786725b47150a0;p=pakfire.git Display consumed space when running a transaction. --- diff --git a/pakfire/packages/util.py b/pakfire/packages/util.py index bee2ccce4..310bb1a03 100644 --- a/pakfire/packages/util.py +++ b/pakfire/packages/util.py @@ -71,6 +71,14 @@ def text_wrap(s, length=65): return [" ".join(l) for l in t] def format_size(s): + sign = 1 + + # If s is negative, we save the sign and run the calculation with the + # absolute value of s. + if s < 0: + sign = -1 + s = -1 * s + units = (" ", "k", "M", "G", "T") unit = 0 @@ -78,7 +86,7 @@ def format_size(s): s /= 1024 unit += 1 - return "%d %s" % (int(s), units[unit]) + return "%d %s" % (int(s) * sign, units[unit]) def format_time(s): return "%02d:%02d" % (s // 60, s % 60) diff --git a/pakfire/transaction.py b/pakfire/transaction.py index 595a853e0..d2bbb169f 100644 --- a/pakfire/transaction.py +++ b/pakfire/transaction.py @@ -33,11 +33,16 @@ class Transaction(object): self.pakfire = pakfire self.actions = [] + self.installsizechange = 0 + @classmethod def from_solver(cls, pakfire, solver, _transaction): # Create a new instance of our own transaction class. transaction = cls(pakfire) + # Save installsizechange. + transaction.installsizechange = _transaction.get_installsizechange() + for step in _transaction.steps(): action = step.get_type() pkg = packages.SolvPackage(pakfire, step.get_solvable()) @@ -180,6 +185,12 @@ class Transaction(object): download_size = sum([a.pkg.size for a in self.downloads]) if download_size: s.append(_("Total download size: %s") % util.format_size(download_size)) + + # Show the size that is consumed by the new packages. + if self.installsizechange > 0: + s.append(_("Installed size: %s") % util.format_size(self.installsizechange)) + elif self.installsizechange < 0: + s.append(_("Freed size: %s") % util.format_size(self.installsizechange)) s.append("") for line in s: diff --git a/src/_pakfiremodule.c b/src/_pakfiremodule.c index 39e1b55e2..d3f65b2fb 100644 --- a/src/_pakfiremodule.c +++ b/src/_pakfiremodule.c @@ -143,6 +143,7 @@ static PyMethodDef Step_methods[] = { static PyMethodDef Transaction_methods[] = { {"steps", (PyCFunction)Transaction_steps, METH_NOARGS, NULL}, + {"get_installsizechange", (PyCFunction)Transaction_get_installsizechange, METH_NOARGS, NULL}, { NULL, NULL, 0, NULL } }; diff --git a/src/transaction.c b/src/transaction.c index 8188cd058..05ac855cc 100644 --- a/src/transaction.c +++ b/src/transaction.c @@ -1,4 +1,8 @@ +#include + +#include + #include "solver.h" #include "step.h" #include "transaction.h" @@ -64,3 +68,9 @@ PyObject *Transaction_steps(TransactionObject *self, PyObject *args) { Py_INCREF(list); // XXX do we need this here? return list; } + +PyObject *Transaction_get_installsizechange(TransactionObject *self) { + int installsizechange = transaction_calc_installsizechange(self->_transaction); + + return Py_BuildValue("i", installsizechange); +} diff --git a/src/transaction.h b/src/transaction.h index 6c26a812a..959c975c7 100644 --- a/src/transaction.h +++ b/src/transaction.h @@ -16,6 +16,7 @@ typedef struct { extern PyObject* Transaction_new(PyTypeObject *type, PyObject *args, PyObject *kwds); extern PyObject *Transaction_dealloc(TransactionObject *self); extern PyObject *Transaction_steps(TransactionObject *self, PyObject *args); +extern PyObject *Transaction_get_installsizechange(TransactionObject *self); extern PyTypeObject TransactionType;