[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