[pacman-dev] [PATCH v4] Split target output
Carson Black
uhhadd at gmail.com
Mon Apr 27 01:35:20 UTC 2020
This patch splits the monolithic 'Packages (count):' output on transactions into
multiple package outputs per category of action: 'Installing (count):', 'Upgrading
(count):', and 'Removing (count):'.
Signed-off-by: Carson Black <uhhadd at gmail.com>
---
src/pacman/util.c | 61 +++++++++++++++++++++++++++++++++++------------
1 file changed, 46 insertions(+), 15 deletions(-)
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 6693ec75..9b192317 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -898,7 +898,8 @@ static void _display_targets(alpm_list_t *targets, int verbose)
char *str;
off_t isize = 0, rsize = 0, dlsize = 0;
unsigned short cols;
- alpm_list_t *i, *names = NULL, *header = NULL, *rows = NULL;
+ char *install_header = NULL, *upgrade_header = NULL, *remove_header = NULL;
+ alpm_list_t *i, *install = NULL, *upgrade = NULL, *remove = NULL, *header = NULL, *rows = NULL;
if(!targets) {
return;
@@ -926,38 +927,68 @@ static void _display_targets(alpm_list_t *targets, int verbose)
rows = alpm_list_add(rows, create_verbose_row(target));
}
- if(target->install) {
+ if(target->install && target->remove) {
+ pm_asprintf(&str, "%s%s-%s%s", alpm_pkg_get_name(target->install), config->colstr.faint,
+ alpm_pkg_get_version(target->install), config->colstr.nocolor);
+ upgrade = alpm_list_add(upgrade, str);
+ } else if(target->install) {
pm_asprintf(&str, "%s%s-%s%s", alpm_pkg_get_name(target->install), config->colstr.faint,
alpm_pkg_get_version(target->install), config->colstr.nocolor);
- } else if(isize == 0) {
+ install = alpm_list_add(install, str);
+ } else {
pm_asprintf(&str, "%s%s-%s%s", alpm_pkg_get_name(target->remove), config->colstr.faint,
alpm_pkg_get_version(target->remove), config->colstr.nocolor);
- } else {
- pm_asprintf(&str, "%s%s-%s %s[%s]%s", alpm_pkg_get_name(target->remove), config->colstr.faint,
- alpm_pkg_get_version(target->remove), config->colstr.nocolor, _("removal"), config->colstr.nocolor);
+ remove = alpm_list_add(remove, str);
}
- names = alpm_list_add(names, str);
}
- /* print to screen */
- pm_asprintf(&str, "%s (%zu)", _("Packages"), alpm_list_count(targets));
- printf("\n");
-
cols = getcols();
if(verbose) {
header = create_verbose_header(alpm_list_count(targets));
if(table_display(header, rows, cols) != 0) {
/* fallback to list display if table wouldn't fit */
- list_display(str, names, cols);
+ if (alpm_list_count(install)) {
+ pm_asprintf(&install_header, _("Installing (%lu):"), alpm_list_count(install));
+ list_display(install_header, install, cols);
+ }
+ if (alpm_list_count(upgrade)) {
+ pm_asprintf(&upgrade_header, _("Upgrading (%lu):"), alpm_list_count(upgrade));
+ list_display(upgrade_header, upgrade, cols);
+ }
+ if (alpm_list_count(remove)) {
+ pm_asprintf(&remove_header, _("Removing (%lu):"), alpm_list_count(remove));
+ list_display(remove_header, remove, cols);
+ }
}
} else {
- list_display(str, names, cols);
+ if (alpm_list_count(install)) {
+ pm_asprintf(&install_header, _("Installing (%lu):"), alpm_list_count(install));
+ list_display(install_header, install, cols);
+ if (alpm_list_count(upgrade) || alpm_list_count(remove)) {
+ printf("\n");
+ }
+ }
+ if (alpm_list_count(upgrade)) {
+ pm_asprintf(&upgrade_header, _("Upgrading (%lu):"), alpm_list_count(upgrade));
+ list_display(upgrade_header, upgrade, cols);
+ if (alpm_list_count(remove)) {
+ printf("\n");
+ }
+ }
+ if (alpm_list_count(remove)) {
+ pm_asprintf(&remove_header, _("Removing (%lu):"), alpm_list_count(remove));
+ list_display(remove_header, remove, cols);
+ }
}
printf("\n");
table_free(header, rows);
- FREELIST(names);
- free(str);
+ FREELIST(install);
+ FREELIST(upgrade);
+ FREELIST(remove);
+ free(install_header);
+ free(upgrade_header);
+ free(remove_header);
rows = NULL;
if(dlsize > 0 || config->op_s_downloadonly) {
--
Ok, this should fix memory management issues.
2.26.0
More information about the pacman-dev
mailing list