[PATCH v3 4/5] config: Add 'config list' command

Jameson Graef Rollins jrollins at finestructure.net
Tue Apr 10 00:22:01 PDT 2012


On Thu, Apr 05 2012, Peter Wang <novalazy at gmail.com> wrote:
> Add a command to list all configuration items with their associated
> values.
>
> One use is as follows: a MUA may prefer to store data in a central
> notmuch configuration file so that the data is accessible across
> different machines, e.g. an addressbook.  The list command helps
> to implement features such as tab completion on the keys.
> ---
>  notmuch-config.c |   66 ++++++++++++++++++++++++++++++++++++++++++++++++++---
>  test/config      |    1 -
>  2 files changed, 62 insertions(+), 5 deletions(-)
>
> diff --git a/notmuch-config.c b/notmuch-config.c
> index 85fc774..d5540ac 100644
> --- a/notmuch-config.c
> +++ b/notmuch-config.c
> @@ -799,20 +799,78 @@ notmuch_config_command_set (void *ctx, char *item, int argc, char *argv[])
>      return ret;
>  }
>  
> +static int
> +notmuch_config_command_list (void *ctx)
> +{
> +    notmuch_config_t *config;
> +    char **groups;
> +    size_t g, groups_length;
> +
> +    config = notmuch_config_open (ctx, NULL, NULL);
> +    if (config == NULL)
> +	return 1;
> +
> +    groups = g_key_file_get_groups (config->key_file, &groups_length);
> +    if (groups == NULL)
> +	return 1;
> +
> +    for (g = 0; g < groups_length; g++) {
> +	char **keys;
> +	size_t k, keys_length;
> +
> +	keys = g_key_file_get_keys (config->key_file,
> +				    groups[g], &keys_length, NULL);
> +	if (keys == NULL)
> +	    continue;
> +
> +	for (k = 0; k < keys_length; k++) {
> +	    char *value;
> +
> +	    value = g_key_file_get_string (config->key_file,
> +					   groups[g], keys[k], NULL);
> +	    if (value != NULL) {
> +		printf ("%s.%s=%s\n", groups[g], keys[k], value);
> +		free (value);
> +	    }
> +	}
> +
> +	g_strfreev (keys);
> +    }
> +
> +    g_strfreev (groups);
> +
> +    notmuch_config_close (config);
> +
> +    return 0;
> +}
> +
>  int
>  notmuch_config_command (void *ctx, int argc, char *argv[])
>  {
>      argc--; argv++; /* skip subcommand argument */
>  
> -    if (argc < 2) {
> -	fprintf (stderr, "Error: notmuch config requires at least two arguments.\n");
> +    if (argc < 1) {
> +	fprintf (stderr, "Error: notmuch config requires at least one argument.\n");
>  	return 1;
>      }

Hey, Peter.  I would say everything up to here looks great.

> -    if (strcmp (argv[0], "get") == 0)
> +    if (strcmp (argv[0], "get") == 0) {
> +	if (argc < 2) {
> +	    fprintf (stderr, "Error: notmuch config get requires at least "
> +		     "two arguments.\n");
> +	    return 1;
> +	}
>  	return notmuch_config_command_get (ctx, argv[1]);
> -    else if (strcmp (argv[0], "set") == 0)
> +    } else if (strcmp (argv[0], "set") == 0) {
> +	if (argc < 2) {
> +	    fprintf (stderr, "Error: notmuch config set requires at least "
> +		     "two arguments.\n");
> +	    return 1;
> +	}
>  	return notmuch_config_command_set (ctx, argv[1], argc - 2, argv + 2);

But then these changes look unrelated to me.  They do look good
intentioned, though.  It's probably best to submit these changes in a
separate unrelated patch.

jamie.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 835 bytes
Desc: not available
URL: <http://notmuchmail.org/pipermail/notmuch/attachments/20120410/ee993805/attachment.pgp>


More information about the notmuch mailing list