]> git.ipfire.org Git - pakfire.git/commitdiff
Display consumed space when running a transaction.
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 30 Jul 2011 20:53:11 +0000 (22:53 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 30 Jul 2011 20:53:11 +0000 (22:53 +0200)
pakfire/packages/util.py
pakfire/transaction.py
src/_pakfiremodule.c
src/transaction.c
src/transaction.h

index bee2ccce41b40334b04d451dac5979f112ead37b..310bb1a037c84e211efe23a77d15379f139313f9 100644 (file)
@@ -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)
index 595a853e06352ac04e24017c579cb2880dde5cc2..d2bbb169ffa0389650e45499dbf68efe15f9579a 100644 (file)
@@ -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:
index 39e1b55e2fbab3409cc37861764a171748808ffe..d3f65b2fbbb1caeaebed6f7f5318c564a861729f 100644 (file)
@@ -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 }
 };
 
index 8188cd05886010b6aa96f1e52f984da88de015c6..05ac855cc10399bbbb6d2b87e73d527687d89536 100644 (file)
@@ -1,4 +1,8 @@
 
+#include <Python.h>
+
+#include <satsolver/transaction.h>
+
 #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);
+}
index 6c26a812a22cc5814dd1e5512c892bc3902816dc..959c975c79d7cbe8829e04f0f5c65a6bd000cf0e 100644 (file)
@@ -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;