On Thu, Apr 05 2012, Peter Wang <noval...@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.

Attachment: pgppQGGBN9H3s.pgp
Description: PGP signature

_______________________________________________
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch

Reply via email to