[pacman-dev] [PATCH 04/15] remove format from statistic messages

Allan McRae allan at archlinux.org
Thu Mar 7 00:17:01 EST 2013


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 <simongmzlj at gmail.com>
> ---
>  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)
> 



More information about the pacman-dev mailing list