[PATCH v3 4/5] config: Add 'config list' command
authorPeter Wang <novalazy@gmail.com>
Fri, 6 Apr 2012 01:48:05 +0000 (11:48 +1000)
committerW. Trevor King <wking@tremily.us>
Fri, 7 Nov 2014 17:46:04 +0000 (09:46 -0800)
c6/ea32dca39a3497ca18ed5f78795e9c5b1b3c4f [new file with mode: 0644]

diff --git a/c6/ea32dca39a3497ca18ed5f78795e9c5b1b3c4f b/c6/ea32dca39a3497ca18ed5f78795e9c5b1b3c4f
new file mode 100644 (file)
index 0000000..84757dd
--- /dev/null
@@ -0,0 +1,177 @@
+Return-Path: <novalazy@gmail.com>\r
+X-Original-To: notmuch@notmuchmail.org\r
+Delivered-To: notmuch@notmuchmail.org\r
+Received: from localhost (localhost [127.0.0.1])\r
+       by olra.theworths.org (Postfix) with ESMTP id ED5BB431FC3\r
+       for <notmuch@notmuchmail.org>; Thu,  5 Apr 2012 18:49:07 -0700 (PDT)\r
+X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
+X-Spam-Flag: NO\r
+X-Spam-Score: -0.799\r
+X-Spam-Level: \r
+X-Spam-Status: No, score=-0.799 tagged_above=-999 required=5\r
+       tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1,\r
+       FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled\r
+Received: from olra.theworths.org ([127.0.0.1])\r
+       by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
+       with ESMTP id uE5vyxEK7V9K for <notmuch@notmuchmail.org>;\r
+       Thu,  5 Apr 2012 18:49:06 -0700 (PDT)\r
+Received: from mail-pz0-f45.google.com (mail-pz0-f45.google.com\r
+       [209.85.210.45]) (using TLSv1 with cipher RC4-SHA (128/128 bits))\r
+       (No client certificate requested)\r
+       by olra.theworths.org (Postfix) with ESMTPS id 6FF01431E62\r
+       for <notmuch@notmuchmail.org>; Thu,  5 Apr 2012 18:49:05 -0700 (PDT)\r
+Received: by mail-pz0-f45.google.com with SMTP id x6so2370746dac.18\r
+       for <notmuch@notmuchmail.org>; Thu, 05 Apr 2012 18:49:05 -0700 (PDT)\r
+DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;\r
+       h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references;\r
+       bh=JfORQm0dQoSxEaeXH7/y0O1LTFyl+9AlWjWl8wVzjvI=;\r
+       b=GCPyNli3stC+CCo0HYQA7P1Y+1ksIAWaN4wrs8uh51InlJFyVTyiUnRBKpgRIzO4an\r
+       7yOtygSpUbIwAUV9FMvgk8S7P428Y51pYiQ/gN9VipGDFF9jVmfrowfn3WdrtFhYJIJd\r
+       g2q1eDxuAJqik/B6fjn5ZwSClciSjZE39iSuBeohHje0/9lZKTKDkX8gYyX+NWVGfYsC\r
+       q2LHM15gDd+8dPfEBjp/QC1P6M8SAbjCBK9oNXOADwYzfPVlZkZG1/8ueyjgk4Rmwwkx\r
+       78PoBmA+/Ynru4whjfunDhWZ3OR3LURRotRY1YhMjPrtHAn4OHBjz7jDH085oLAZt/QK\r
+       RYsQ==\r
+Received: by 10.68.225.39 with SMTP id rh7mr11317627pbc.104.1333676945133;\r
+       Thu, 05 Apr 2012 18:49:05 -0700 (PDT)\r
+Received: from localhost (215.42.233.220.static.exetel.com.au.\r
+       [220.233.42.215])\r
+       by mx.google.com with ESMTPS id z1sm4783917pbc.38.2012.04.05.18.49.01\r
+       (version=TLSv1/SSLv3 cipher=OTHER);\r
+       Thu, 05 Apr 2012 18:49:03 -0700 (PDT)\r
+From: Peter Wang <novalazy@gmail.com>\r
+To: notmuch@notmuchmail.org\r
+Subject: [PATCH v3 4/5] config: Add 'config list' command\r
+Date: Fri,  6 Apr 2012 11:48:05 +1000\r
+Message-Id: <1333676886-9835-5-git-send-email-novalazy@gmail.com>\r
+X-Mailer: git-send-email 1.7.4.4\r
+In-Reply-To: <1333676886-9835-1-git-send-email-novalazy@gmail.com>\r
+References: <1332282698-7951-1-git-send-email-novalazy@gmail.com>\r
+       <1333676886-9835-1-git-send-email-novalazy@gmail.com>\r
+X-BeenThere: notmuch@notmuchmail.org\r
+X-Mailman-Version: 2.1.13\r
+Precedence: list\r
+List-Id: "Use and development of the notmuch mail system."\r
+       <notmuch.notmuchmail.org>\r
+List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
+       <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
+List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
+List-Post: <mailto:notmuch@notmuchmail.org>\r
+List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
+List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
+       <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
+X-List-Received-Date: Fri, 06 Apr 2012 01:49:08 -0000\r
+\r
+Add a command to list all configuration items with their associated\r
+values.\r
+\r
+One use is as follows: a MUA may prefer to store data in a central\r
+notmuch configuration file so that the data is accessible across\r
+different machines, e.g. an addressbook.  The list command helps\r
+to implement features such as tab completion on the keys.\r
+---\r
+ notmuch-config.c |   66 ++++++++++++++++++++++++++++++++++++++++++++++++++---\r
+ test/config      |    1 -\r
+ 2 files changed, 62 insertions(+), 5 deletions(-)\r
+\r
+diff --git a/notmuch-config.c b/notmuch-config.c\r
+index 85fc774..d5540ac 100644\r
+--- a/notmuch-config.c\r
++++ b/notmuch-config.c\r
+@@ -799,20 +799,78 @@ notmuch_config_command_set (void *ctx, char *item, int argc, char *argv[])\r
+     return ret;\r
+ }\r
+ \r
++static int\r
++notmuch_config_command_list (void *ctx)\r
++{\r
++    notmuch_config_t *config;\r
++    char **groups;\r
++    size_t g, groups_length;\r
++\r
++    config = notmuch_config_open (ctx, NULL, NULL);\r
++    if (config == NULL)\r
++      return 1;\r
++\r
++    groups = g_key_file_get_groups (config->key_file, &groups_length);\r
++    if (groups == NULL)\r
++      return 1;\r
++\r
++    for (g = 0; g < groups_length; g++) {\r
++      char **keys;\r
++      size_t k, keys_length;\r
++\r
++      keys = g_key_file_get_keys (config->key_file,\r
++                                  groups[g], &keys_length, NULL);\r
++      if (keys == NULL)\r
++          continue;\r
++\r
++      for (k = 0; k < keys_length; k++) {\r
++          char *value;\r
++\r
++          value = g_key_file_get_string (config->key_file,\r
++                                         groups[g], keys[k], NULL);\r
++          if (value != NULL) {\r
++              printf ("%s.%s=%s\n", groups[g], keys[k], value);\r
++              free (value);\r
++          }\r
++      }\r
++\r
++      g_strfreev (keys);\r
++    }\r
++\r
++    g_strfreev (groups);\r
++\r
++    notmuch_config_close (config);\r
++\r
++    return 0;\r
++}\r
++\r
+ int\r
+ notmuch_config_command (void *ctx, int argc, char *argv[])\r
+ {\r
+     argc--; argv++; /* skip subcommand argument */\r
+ \r
+-    if (argc < 2) {\r
+-      fprintf (stderr, "Error: notmuch config requires at least two arguments.\n");\r
++    if (argc < 1) {\r
++      fprintf (stderr, "Error: notmuch config requires at least one argument.\n");\r
+       return 1;\r
+     }\r
+ \r
+-    if (strcmp (argv[0], "get") == 0)\r
++    if (strcmp (argv[0], "get") == 0) {\r
++      if (argc < 2) {\r
++          fprintf (stderr, "Error: notmuch config get requires at least "\r
++                   "two arguments.\n");\r
++          return 1;\r
++      }\r
+       return notmuch_config_command_get (ctx, argv[1]);\r
+-    else if (strcmp (argv[0], "set") == 0)\r
++    } else if (strcmp (argv[0], "set") == 0) {\r
++      if (argc < 2) {\r
++          fprintf (stderr, "Error: notmuch config set requires at least "\r
++                   "two arguments.\n");\r
++          return 1;\r
++      }\r
+       return notmuch_config_command_set (ctx, argv[1], argc - 2, argv + 2);\r
++    } else if (strcmp (argv[0], "list") == 0) {\r
++      return notmuch_config_command_list (ctx);\r
++    }\r
+ \r
+     fprintf (stderr, "Unrecognized argument for notmuch config: %s\n",\r
+            argv[0]);\r
+diff --git a/test/config b/test/config\r
+index cce2abc..0fbc79b 100755\r
+--- a/test/config\r
++++ b/test/config\r
+@@ -23,7 +23,6 @@ yyy yyy\r
+ zzz zzz"\r
+ \r
+ test_begin_subtest "List all items"\r
+-test_subtest_known_broken\r
+ notmuch config set database.path "/canonical/path"\r
+ output=$(notmuch config list)\r
+ test_expect_equal "$output" "\\r
+-- \r
+1.7.4.4\r
+\r