[pacman-dev] [PATCH] Verbose package list now show if packages are explicit or dependencies
Guillaume Bouchard
guillaum.bouchard at gmail.com
Sat May 10 10:54:27 EDT 2014
Hello,
I'm reopening this discussion. A few time ago, I proposed to "grey"
explicit package name. Finally it was judged as confusing.
Instead I propose to display only the package type during verbose
package listing. To achieve this, I splitted the packages table into
two tables, the one for explicit packages, and the other for
dependencies, examples:
$ pacman -S epiphany
[sudo] password for guillaume:
resolving dependencies...
looking for conflicting packages...
Package (1) New Version Net Change Download Size
extra/epiphany 3.12.0-1 6.89 MiB 1.48 MiB
Dependency (3) New Version Net Change Download Size
extra/gcr 3.12.0-1 5.42 MiB 0.77 MiB
extra/libwnck3 3.4.7-1 2.85 MiB
extra/libxres 1.0.7-1 0.02 MiB
Total Download Size: 2.25 MiB
Total Installed Size: 15.17 MiB
$ pacman -Rs gitg
checking dependencies...
Package (1) Old Version Net Change
gitg 0.3.2-1 -1.41 MiB
Dependency (8) Old Version Net Change
geoclue 0.12.99-1 -1.02 MiB
gtksourceview3 3.12.1-1 -6.78 MiB
...
Feedback needed ;)
--
G
On Sat, May 10, 2014 at 4:48 PM, Guillaume Bouchard
<guillaum.bouchard at gmail.com> wrote:
> When verbose package is activated, the table is displayed two times,
> once for explicit packages and a second time for dependencies.
>
> This helps understanding the upgrade process. You can focus on on
> explicit package and gives less attention to dependencies.
>
> Design choices:
>
> -- If a table does not fit in terminal width, it fallbacks to traditional
> compact display, but this fallback can happen on none, one or both
> tables
>
> -- The header name stay short, "Package" and "Dependancies". This is to
> avoid too long column name, but i think it is enough explicit as is.
> ---
> src/pacman/util.c | 59 +++++++++++++++++++++++++++++++++++++++++++------------
> 1 file changed, 46 insertions(+), 13 deletions(-)
>
> diff --git a/src/pacman/util.c b/src/pacman/util.c
> index d42e27b..864b7a3 100644
> --- a/src/pacman/util.c
> +++ b/src/pacman/util.c
> @@ -774,12 +774,12 @@ void signature_display(const char *title, alpm_siglist_t *siglist,
> }
>
> /* creates a header row for use with table_display */
> -static alpm_list_t *create_verbose_header(size_t count)
> +static alpm_list_t *create_verbose_header(size_t count, int is_explicit)
> {
> alpm_list_t *ret = NULL;
>
> char *header;
> - pm_asprintf(&header, "%s (%zd)", _("Package"), count);
> + pm_asprintf(&header, "%s (%zd)", (is_explicit ? _("Package") : _("Dependency")), count);
>
> add_table_cell(&ret, header, CELL_TITLE | CELL_FREE);
> add_table_cell(&ret, _("Old Version"), CELL_TITLE);
> @@ -846,7 +846,11 @@ 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;
> + alpm_list_t *i,
> + *names = NULL, *names_explicit = NULL, *names_deps = NULL,
> + *header_explicit = NULL, *header_deps = NULL,
> + *rows = NULL, *explicit = NULL, *deps = NULL;
> + size_t count_explicit = 0, count_deps = 0;
>
> if(!targets) {
> return;
> @@ -870,10 +874,6 @@ static void _display_targets(alpm_list_t *targets, int verbose)
> for(i = targets; i; i = alpm_list_next(i)) {
> pm_target_t *target = i->data;
>
> - if(verbose) {
> - rows = alpm_list_add(rows, create_verbose_row(target));
> - }
> -
> if(target->install) {
> pm_asprintf(&str, "%s-%s", alpm_pkg_get_name(target->install),
> alpm_pkg_get_version(target->install));
> @@ -885,27 +885,60 @@ static void _display_targets(alpm_list_t *targets, int verbose)
> alpm_pkg_get_version(target->remove), _("removal"));
> }
> names = alpm_list_add(names, str);
> +
> + if(verbose) {
> + // Check if package is installed as a explicit or as a dependency
> + // and store it in associated lists
> + if(alpm_pkg_get_reason(target->remove ? target->remove : target->install) == ALPM_PKG_REASON_DEPEND) {
> + deps = alpm_list_add(deps, create_verbose_row(target));
> + names_explicit = alpm_list_add(names_explicit, str);
> + count_deps += 1;
> + } else {
> + explicit = alpm_list_add(explicit, create_verbose_row(target));
> + names_deps = alpm_list_add(names_deps, str);
> + count_explicit += 1;
> + }
> + }
> +
> }
>
> /* print to screen */
> - pm_asprintf(&str, "%s (%zd)", _("Packages"), alpm_list_count(targets));
> printf("\n");
>
> cols = getcols(fileno(stdout));
> if(verbose) {
> - header = create_verbose_header(alpm_list_count(targets));
> - if(table_display(header, rows, cols) != 0) {
> + header_explicit = create_verbose_header(count_explicit, 1);
> + if(table_display(header_explicit, explicit, cols) != 0) {
> + /* fallback to list display if table wouldn't fit */
> + pm_asprintf(&str, "%s (%zd)", _("Packages"), count_explicit);
> + list_display(str, names_explicit, cols);
> + free(str);
> + }
> + printf("\n");
> + header_deps = create_verbose_header(count_deps, 0);
> + if(table_display(header_deps, deps, cols) != 0) {
> /* fallback to list display if table wouldn't fit */
> - list_display(str, names, cols);
> + pm_asprintf(&str, "%s (%zd)", _("Dependencies"), count_deps);
> + list_display(str, names_deps, cols);
> + free(str);
> }
> +
> } else {
> + pm_asprintf(&str, "%s (%zd)", _("Packages"), alpm_list_count(targets));
> list_display(str, names, cols);
> + free(str);
> }
> printf("\n");
>
> - table_free(header, rows);
> + table_free(header_explicit, explicit);
> + table_free(header_deps, deps);
> +
> FREELIST(names);
> - free(str);
> + /* The content of names_explicit and names_deps has allready been free'ed
> + * FREELIST(names), so we only free the containers */
> + free(names_explicit);
> + free(names_deps);
> +
> rows = NULL;
>
> if(dlsize > 0 || config->op_s_downloadonly) {
> --
> 1.9.2
>
More information about the pacman-dev
mailing list