summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2011-06-02 00:11:45 +0200
committerDan McGee <dan@archlinux.org>2011-06-03 00:21:38 +0200
commit8f30e1b110e5c7bf2ec3eb397fe6880a2c8ee0a9 (patch)
tree5bb9e9f9738ecabf52375767b1e9c7f4f4b84b78 /src
parent142c2132cf3312c1ad38d87e323277664985701c (diff)
downloadpacman-8f30e1b110e5c7bf2ec3eb397fe6880a2c8ee0a9.tar.gz
pacman-8f30e1b110e5c7bf2ec3eb397fe6880a2c8ee0a9.tar.xz
Show net upgrade size on -U/-S operations
If it is different than the raw installed size metric we already show, compute the net upgrade size. For some sync operations, this can even be negative if newer packages are smaller than the ones they replace locally. Implements FS#12566. Example: Targets (1): telepathy-glib-0.14.7-1 Total Download Size: 1.07 MiB Total Installed Size: 15.72 MiB Net Upgrade Size: -0.29 MiB Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'src')
-rw-r--r--src/pacman/remove.c2
-rw-r--r--src/pacman/util.c13
2 files changed, 13 insertions, 2 deletions
diff --git a/src/pacman/remove.c b/src/pacman/remove.c
index 58e6edd5..094a43bf 100644
--- a/src/pacman/remove.c
+++ b/src/pacman/remove.c
@@ -31,7 +31,7 @@
#include "util.h"
#include "conf.h"
-static int remove_target(char *target)
+static int remove_target(const char *target)
{
pmpkg_t *info;
pmdb_t *db_local = alpm_option_get_localdb();
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 8631075f..bfc707ca 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -688,8 +688,9 @@ void display_targets(const alpm_list_t *pkgs, int install)
const char *title, *label;
double size;
const alpm_list_t *i;
- off_t isize = 0, dlsize = 0;
+ off_t isize = 0, rsize = 0, dlsize = 0;
alpm_list_t *j, *lp, *header = NULL, *targets = NULL;
+ pmdb_t *db_local = alpm_option_get_localdb();
if(!pkgs) {
return;
@@ -700,7 +701,12 @@ void display_targets(const alpm_list_t *pkgs, int install)
pmpkg_t *pkg = alpm_list_getdata(i);
if(install) {
+ pmpkg_t *lpkg = alpm_db_get_pkg(db_local, alpm_pkg_get_name(pkg));
dlsize += alpm_pkg_download_size(pkg);
+ if(lpkg) {
+ /* add up size of all removed packages */
+ rsize += alpm_pkg_get_isize(lpkg);
+ }
}
isize += alpm_pkg_get_isize(pkg);
@@ -736,6 +742,11 @@ void display_targets(const alpm_list_t *pkgs, int install)
if(!(config->flags & PM_TRANS_FLAG_DOWNLOADONLY)) {
size = humanize_size(isize, 'M', 1, &label);
printf(_("Total Installed Size: %.2f %s\n"), size, label);
+ /* only show this net value if different from raw installed size */
+ if(rsize > 0) {
+ size = humanize_size(isize - rsize, 'M', 1, &label);
+ printf(_("Net Upgrade Size: %.2f %s\n"), size, label);
+ }
}
} else {
size = humanize_size(isize, 'M', 1, &label);