Re: [PATCH v2 4/6] setup: move tag printing and parsing into separate functions

Subject: Re: [PATCH v2 4/6] setup: move tag printing and parsing into separate functions

Date: Mon, 23 Jan 2012 00:07:37 -0500

To: Pieter Praet

Cc: Notmuch Mail

From: Austin Clements


Quoth Pieter Praet on Jan 23 at  5:22 am:
> From: Austin Clements <amdragon@MIT.EDU>
> 
> * notmuch-setup.c (notmuch_setup_command):
>   Break tag printing and response parsing out into separate functions
>   called `print_tag_list' respectively `parse_tag_list', for reuse
>   with the 'search.exclude_tags' option.

Since I'm revising this patch a little bit anyway, how about

setup: Create functions for tag list printing and parsing

This refactors the tag list printing and parsing currently used for
new.tags so that both can be reused for the new search.exclude_tags
option.

> 
> ---
>  notmuch-setup.c |   55 ++++++++++++++++++++++++++++++++++---------------------
>  1 files changed, 34 insertions(+), 21 deletions(-)
> 
> diff --git a/notmuch-setup.c b/notmuch-setup.c
> index c3ea937..dcfa607 100644
> --- a/notmuch-setup.c
> +++ b/notmuch-setup.c
> @@ -87,6 +87,38 @@ welcome_message_post_setup (void)
>  "have sufficient storage space available now.\n\n");
>  }
>  
> +static void
> +print_tag_list (const char **tags, size_t tags_len)
> +{
> +    unsigned int i;
> +    for (i = 0; i < tags_len; i++) {
> +	if (i != 0)
> +	    printf (" ");
> +	printf ("%s", tags[i]);
> +    }
> +}
> +
> +static GPtrArray *
> +parse_tag_list (void *ctx, char *response)
> +{
> +    GPtrArray *tags = g_ptr_array_new ();
> +    char *tag = response;
> +    char *space;
> +
> +    while (tag && *tag) {
> +	space = strchr (tag, ' ');
> +	if (space)
> +	    g_ptr_array_add (tags, talloc_strndup (ctx, tag, space - tag));
> +	else
> +	    g_ptr_array_add (tags, talloc_strdup (ctx, tag));
> +	tag = space;
> +	while (tag && *tag == ' ')
> +	    tag++;
> +    }
> +
> +    return tags;
> +}
> +
>  int
>  notmuch_setup_command (unused (void *ctx),
>  		       unused (int argc), unused (char *argv[]))
> @@ -164,30 +196,11 @@ notmuch_setup_command (unused (void *ctx),
>      new_tags = notmuch_config_get_new_tags (config, &new_tags_len);
>  
>      printf ("Tags to apply to all new messages (separated by spaces) [");
> -
> -    for (i = 0; i < new_tags_len; i++) {
> -	if (i != 0)
> -	    printf (" ");
> -	printf ("%s", new_tags[i]);
> -    }
> -
> +    print_tag_list(new_tags, new_tags_len);

Missing space before paren.  (Sorry, my fault.)

>      prompt ("]: ");
>  
>      if (strlen (response)) {
> -	GPtrArray *tags = g_ptr_array_new ();
> -	char *tag = response;
> -	char *space;
> -
> -	while (tag && *tag) {
> -	    space = strchr (tag, ' ');
> -	    if (space)
> -		g_ptr_array_add (tags, talloc_strndup (ctx, tag, space - tag));
> -	    else
> -		g_ptr_array_add (tags, talloc_strdup (ctx, tag));
> -	    tag = space;
> -	    while (tag && *tag == ' ')
> -		tag++;
> -	}
> +	GPtrArray *tags = parse_tag_list (ctx, response);
>  
>  	notmuch_config_set_new_tags (config, (const char **) tags->pdata,
>  				     tags->len);

Thread: