On 07/03/13 03:51, Simon Gomizelj wrote:
> Remove the format component of the "Total Download Size" and related
> messages. The heading will be colourized, the size won't.
> 
> However since the length of these messages can vary by language, we need
> a pretty printer to format them nicely.
> 
> Signed-off-by: Simon Gomizelj <[email protected]>
> ---
>  src/pacman/util.c | 56 
> +++++++++++++++++++++++++++++++++++++++++++++----------
>  1 file changed, 46 insertions(+), 10 deletions(-)
> 
> diff --git a/src/pacman/util.c b/src/pacman/util.c
> index 90892af..aa352e3 100644
> --- a/src/pacman/util.c
> +++ b/src/pacman/util.c
> @@ -47,6 +47,11 @@
>  #include "callback.h"
>  
>  
> +struct table_row_t {
> +     const char *label;
> +     int size;
> +};
> +
>  int trans_init(alpm_transflag_t flags, int check_valid)
>  {
>       int ret;
> @@ -824,15 +829,48 @@ static alpm_list_t *create_verbose_row(pm_target_t 
> *target)
>       return ret;
>  }
>  
> +static void add_table_row(alpm_list_t **rows, const char *label, int size)

I'd like a more descriptive name for this.  How about
add_transaction_sizes_row()?

Also, can we change "rows" to "table".  This makes the variable names
more distinct.

> +{
> +     struct table_row_t *row = malloc(sizeof(struct table_row_t));
> +
> +     row->label = label;
> +     row->size = size;
> +
> +     *rows = alpm_list_add(*rows, row);
> +}
> +
> +static void display_transaction_sizes(alpm_list_t *table)
> +{
> +     alpm_list_t *i;
> +     int max_len = 0;
> +
> +     for(i = table; i; i = alpm_list_next(i)) {
> +             struct table_row_t *row = i->data;
> +             int len = string_length(row->label);
> +
> +             if(len > max_len)
> +                     max_len = len;
> +     }
> +
> +     max_len += 2;
> +
> +     for(i = table; i; i = alpm_list_next(i)) {
> +             struct table_row_t *row = i->data;
> +             const char *units;
> +             double s = humanize_size(row->size, 'M', 2, &units);
> +
> +             printf("%-*s %.2f %s\n", max_len, row->label, s, units);
> +     }
> +}
> +
>  /* prepare a list of pkgs to display */
>  static void _display_targets(alpm_list_t *targets, int verbose)
>  {
>       char *str;
> -     const char *label;
> -     double size;
>       off_t isize = 0, rsize = 0, dlsize = 0;
>       unsigned short cols;
>       alpm_list_t *i, *rows = NULL, *names = NULL;
> +     alpm_list_t *table = NULL;

Combine into above line.

>  
>       if(!targets) {
>               return;
> @@ -897,24 +935,22 @@ static void _display_targets(alpm_list_t *targets, int 
> verbose)
>       free(str);
>  
>       if(dlsize > 0 || config->op_s_downloadonly) {
> -             size = humanize_size(dlsize, 'M', 2, &label);
> -             printf(_("Total Download Size:    %.2f %s\n"), size, label);
> +             add_table_row(&table, _("Total Download Size:"), dlsize);
>       }
>       if(!config->op_s_downloadonly) {
>               if(isize > 0) {
> -                     size = humanize_size(isize, 'M', 2, &label);
> -                     printf(_("Total Installed Size:   %.2f %s\n"), size, 
> label);
> +                     add_table_row(&table, _("Total Installed Size:"), 
> isize);
>               }
>               if(rsize > 0 && isize == 0) {
> -                     size = humanize_size(rsize, 'M', 2, &label);
> -                     printf(_("Total Removed Size:     %.2f %s\n"), size, 
> label);
> +                     add_table_row(&table, _("Total Removed Size:"), rsize);
>               }
>               /* only show this net value if different from raw installed 
> size */
>               if(isize > 0 && rsize > 0) {
> -                     size = humanize_size(isize - rsize, 'M', 2, &label);
> -                     printf(_("Net Upgrade Size:       %.2f %s\n"), size, 
> label);
> +                     add_table_row(&table, _("Net Upgrade Size:"), isize - 
> rsize);
>               }
>       }
> +     display_transaction_sizes(table);
> +     FREELIST(table);
>  }
>  
>  static int target_cmp(const void *p1, const void *p2)
> 


Reply via email to