config: Add 'config list' command

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.
This commit is contained in:
Peter Wang 2012-04-14 11:41:05 +10:00 committed by David Bremner
parent 86f01063d7
commit d32de8b3c0
2 changed files with 47 additions and 1 deletions

View file

@ -799,6 +799,51 @@ 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[])
{
@ -823,6 +868,8 @@ notmuch_config_command (void *ctx, int argc, char *argv[])
return 1;
}
return notmuch_config_command_set (ctx, argv[1], argc - 2, argv + 2);
} else if (strcmp (argv[0], "list") == 0) {
return notmuch_config_command_list (ctx);
}
fprintf (stderr, "Unrecognized argument for notmuch config: %s\n",

View file

@ -43,7 +43,6 @@ notmuch config set foo.nonexistent
test_expect_equal "$(notmuch config get foo.nonexistent)" ""
test_begin_subtest "List all items"
test_subtest_known_broken
notmuch config set database.path "/canonical/path"
output=$(notmuch config list)
test_expect_equal "$output" "\