diff --git a/bin/xbps-install/transaction.c b/bin/xbps-install/transaction.c index 470adeb4..076ae9c8 100644 --- a/bin/xbps-install/transaction.c +++ b/bin/xbps-install/transaction.c @@ -114,29 +114,33 @@ show_transaction_sizes(struct transaction *trans, int cols) /* * Show the list of packages that will be installed. */ - if (xbps_dictionary_get_uint32(trans->d, "total-install-pkgs", - &trans->inst_pkgcnt)) { + xbps_dictionary_get_uint32(trans->d, "total-install-pkgs", + &trans->inst_pkgcnt); + if (trans->inst_pkgcnt) { printf("%u package%s will be installed:\n", trans->inst_pkgcnt, trans->inst_pkgcnt == 1 ? "" : "s"); show_package_list(trans->iter, "install", cols); printf("\n"); } - if (xbps_dictionary_get_uint32(trans->d, "total-update-pkgs", - &trans->up_pkgcnt)) { + xbps_dictionary_get_uint32(trans->d, "total-update-pkgs", + &trans->up_pkgcnt); + if (trans->up_pkgcnt) { printf("%u package%s will be updated:\n", trans->up_pkgcnt, trans->up_pkgcnt == 1 ? "" : "s"); show_package_list(trans->iter, "update", cols); printf("\n"); } - if (xbps_dictionary_get_uint32(trans->d, "total-configure-pkgs", - &trans->cf_pkgcnt)) { + xbps_dictionary_get_uint32(trans->d, "total-configure-pkgs", + &trans->cf_pkgcnt); + if (trans->cf_pkgcnt) { printf("%u package%s will be configured:\n", trans->cf_pkgcnt, trans->cf_pkgcnt == 1 ? "" : "s"); show_package_list(trans->iter, "configure", cols); printf("\n"); } - if (xbps_dictionary_get_uint32(trans->d, "total-remove-pkgs", - &trans->rm_pkgcnt)) { + xbps_dictionary_get_uint32(trans->d, "total-remove-pkgs", + &trans->rm_pkgcnt); + if (trans->rm_pkgcnt) { printf("%u package%s will be removed:\n", trans->rm_pkgcnt, trans->rm_pkgcnt == 1 ? "" : "s"); show_package_list(trans->iter, "remove", cols); @@ -158,15 +162,15 @@ show_transaction_sizes(struct transaction *trans, int cols) "%s\n", strerror(errno)); return -1; } - printf("Total download size:\t%6s\n", size); + printf("Size to download: %6s\n", size); } if (instsize) { - if (xbps_humanize_number(size, (int64_t)(instsize+dlsize)) == -1) { + if (xbps_humanize_number(size, (int64_t)instsize) == -1) { xbps_error_printf("humanize_number2 returns " "%s\n", strerror(errno)); return -1; } - printf("Total installed size:\t%6s\n", size); + printf("Size required on disk: %6s\n", size); } if (rmsize) { if (xbps_humanize_number(size, (int64_t)rmsize) == -1) { @@ -174,7 +178,7 @@ show_transaction_sizes(struct transaction *trans, int cols) "%s\n", strerror(errno)); return -1; } - printf("Total freed size:\t%6s\n", size); + printf("Size freed on disk: %6s\n", size); } printf("\n"); diff --git a/lib/transaction_dictionary.c b/lib/transaction_dictionary.c index 1db4d947..f7d0113c 100644 --- a/lib/transaction_dictionary.c +++ b/lib/transaction_dictionary.c @@ -90,6 +90,18 @@ compute_transaction_stats(struct xbps_handle *xhp) } tsize = 0; + if ((strcmp(tract, "install") == 0) || + (strcmp(tract, "update") == 0)) { + xbps_dictionary_get_uint64(obj, + "installed_size", &tsize); + instsize += tsize; + if (xbps_repository_is_remote(repo)) { + xbps_dictionary_get_uint64(obj, + "filename-size", &tsize); + dlsize += tsize; + instsize += tsize; + } + } /* * If removing or updating a package, get installed_size * from pkg's metadata dictionary. @@ -108,39 +120,32 @@ compute_transaction_stats(struct xbps_handle *xhp) "installed_size", &tsize); rmsize += tsize; } - if ((strcmp(tract, "install") == 0) || - (strcmp(tract, "update") == 0)) { - xbps_dictionary_get_uint64(obj, - "installed_size", &tsize); - instsize += tsize; - if (xbps_repository_is_remote(repo)) { - xbps_dictionary_get_uint64(obj, - "filename-size", &tsize); - dlsize += tsize; - instsize += tsize; - } - } } xbps_object_iterator_release(iter); - if (inst_pkgcnt && !xbps_dictionary_set_uint32(xhp->transd, + if (instsize > rmsize) { + instsize -= rmsize; + rmsize = 0; + } else if (rmsize > instsize) { + rmsize -= instsize; + instsize = 0; + } else { + instsize = rmsize = 0; + } + + if (!xbps_dictionary_set_uint32(xhp->transd, "total-install-pkgs", inst_pkgcnt)) return EINVAL; - if (up_pkgcnt && !xbps_dictionary_set_uint32(xhp->transd, + if (!xbps_dictionary_set_uint32(xhp->transd, "total-update-pkgs", up_pkgcnt)) return EINVAL; - if (cf_pkgcnt && !xbps_dictionary_set_uint32(xhp->transd, + if (!xbps_dictionary_set_uint32(xhp->transd, "total-configure-pkgs", cf_pkgcnt)) return EINVAL; - if (rm_pkgcnt && !xbps_dictionary_set_uint32(xhp->transd, + if (!xbps_dictionary_set_uint32(xhp->transd, "total-remove-pkgs", rm_pkgcnt)) return EINVAL; - if (instsize) - instsize -= rmsize; - if (rmsize) - rmsize -= instsize; - if (!xbps_dictionary_set_uint64(xhp->transd, "total-installed-size", instsize)) return EINVAL;