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@gmail.com> --- src/pacman/util.c | 63 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 15 deletions(-) diff --git a/src/pacman/util.c b/src/pacman/util.c index 6693ec75..8fdf2cea 100644 --- a/src/pacman/util.c +++ b/src/pacman/util.c @@ -898,7 +898,10 @@ 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; + char *upgrade_header; + char *remove_header; + alpm_list_t *i, *install = NULL, *upgrade = NULL, *remove = NULL, *header = NULL, *rows = NULL; if(!targets) { return; @@ -926,38 +929,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); + if (install) FREELIST(install); + if (upgrade) FREELIST(upgrade); + if (remove) FREELIST(remove); + if (install_header) free(install_header); + if (upgrade_header) free(upgrade_header); + if (remove_header) free(remove_header); rows = NULL; if(dlsize > 0 || config->op_s_downloadonly) { -- I believe this should address your feedback. 2.26.0