[PATCH v2 4/5] config: Add 'config list' command
Peter Wang
novalazy at gmail.com
Fri Mar 30 16:15:49 PDT 2012
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;
}
- 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);
+ } else if (strcmp (argv[0], "list") == 0) {
+ return notmuch_config_command_list (ctx);
+ }
fprintf (stderr, "Unrecognized argument for notmuch config: %s\n",
argv[0]);
diff --git a/test/config b/test/config
index 73c58ff..93e3a04 100755
--- a/test/config
+++ b/test/config
@@ -18,7 +18,6 @@ test_expect_success "Set list value" \
'notmuch config set foo.list xxx "yyy yyy" "zzz zzz"'
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" "\
--
1.7.4.4
More information about the notmuch
mailing list