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
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)
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())
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:
static PyMethodDef Transaction_methods[] = {
{"steps", (PyCFunction)Transaction_steps, METH_NOARGS, NULL},
+ {"get_installsizechange", (PyCFunction)Transaction_get_installsizechange, METH_NOARGS, NULL},
{ NULL, NULL, 0, NULL }
};
+#include <Python.h>
+
+#include <satsolver/transaction.h>
+
#include "solver.h"
#include "step.h"
#include "transaction.h"
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);
+}
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;