[PATCH] RFC: all deleting all properties with a given key
[notmuch-archives.git] / c6 / ea32dca39a3497ca18ed5f78795e9c5b1b3c4f
1 Return-Path: <novalazy@gmail.com>\r
2 X-Original-To: notmuch@notmuchmail.org\r
3 Delivered-To: notmuch@notmuchmail.org\r
4 Received: from localhost (localhost [127.0.0.1])\r
5         by olra.theworths.org (Postfix) with ESMTP id ED5BB431FC3\r
6         for <notmuch@notmuchmail.org>; Thu,  5 Apr 2012 18:49:07 -0700 (PDT)\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
8 X-Spam-Flag: NO\r
9 X-Spam-Score: -0.799\r
10 X-Spam-Level: \r
11 X-Spam-Status: No, score=-0.799 tagged_above=-999 required=5\r
12         tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1,\r
13         FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled\r
14 Received: from olra.theworths.org ([127.0.0.1])\r
15         by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
16         with ESMTP id uE5vyxEK7V9K for <notmuch@notmuchmail.org>;\r
17         Thu,  5 Apr 2012 18:49:06 -0700 (PDT)\r
18 Received: from mail-pz0-f45.google.com (mail-pz0-f45.google.com\r
19         [209.85.210.45]) (using TLSv1 with cipher RC4-SHA (128/128 bits))\r
20         (No client certificate requested)\r
21         by olra.theworths.org (Postfix) with ESMTPS id 6FF01431E62\r
22         for <notmuch@notmuchmail.org>; Thu,  5 Apr 2012 18:49:05 -0700 (PDT)\r
23 Received: by mail-pz0-f45.google.com with SMTP id x6so2370746dac.18\r
24         for <notmuch@notmuchmail.org>; Thu, 05 Apr 2012 18:49:05 -0700 (PDT)\r
25 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;\r
26         h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references;\r
27         bh=JfORQm0dQoSxEaeXH7/y0O1LTFyl+9AlWjWl8wVzjvI=;\r
28         b=GCPyNli3stC+CCo0HYQA7P1Y+1ksIAWaN4wrs8uh51InlJFyVTyiUnRBKpgRIzO4an\r
29         7yOtygSpUbIwAUV9FMvgk8S7P428Y51pYiQ/gN9VipGDFF9jVmfrowfn3WdrtFhYJIJd\r
30         g2q1eDxuAJqik/B6fjn5ZwSClciSjZE39iSuBeohHje0/9lZKTKDkX8gYyX+NWVGfYsC\r
31         q2LHM15gDd+8dPfEBjp/QC1P6M8SAbjCBK9oNXOADwYzfPVlZkZG1/8ueyjgk4Rmwwkx\r
32         78PoBmA+/Ynru4whjfunDhWZ3OR3LURRotRY1YhMjPrtHAn4OHBjz7jDH085oLAZt/QK\r
33         RYsQ==\r
34 Received: by 10.68.225.39 with SMTP id rh7mr11317627pbc.104.1333676945133;\r
35         Thu, 05 Apr 2012 18:49:05 -0700 (PDT)\r
36 Received: from localhost (215.42.233.220.static.exetel.com.au.\r
37         [220.233.42.215])\r
38         by mx.google.com with ESMTPS id z1sm4783917pbc.38.2012.04.05.18.49.01\r
39         (version=TLSv1/SSLv3 cipher=OTHER);\r
40         Thu, 05 Apr 2012 18:49:03 -0700 (PDT)\r
41 From: Peter Wang <novalazy@gmail.com>\r
42 To: notmuch@notmuchmail.org\r
43 Subject: [PATCH v3 4/5] config: Add 'config list' command\r
44 Date: Fri,  6 Apr 2012 11:48:05 +1000\r
45 Message-Id: <1333676886-9835-5-git-send-email-novalazy@gmail.com>\r
46 X-Mailer: git-send-email 1.7.4.4\r
47 In-Reply-To: <1333676886-9835-1-git-send-email-novalazy@gmail.com>\r
48 References: <1332282698-7951-1-git-send-email-novalazy@gmail.com>\r
49         <1333676886-9835-1-git-send-email-novalazy@gmail.com>\r
50 X-BeenThere: notmuch@notmuchmail.org\r
51 X-Mailman-Version: 2.1.13\r
52 Precedence: list\r
53 List-Id: "Use and development of the notmuch mail system."\r
54         <notmuch.notmuchmail.org>\r
55 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
56         <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
57 List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
58 List-Post: <mailto:notmuch@notmuchmail.org>\r
59 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
60 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
61         <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
62 X-List-Received-Date: Fri, 06 Apr 2012 01:49:08 -0000\r
63 \r
64 Add a command to list all configuration items with their associated\r
65 values.\r
66 \r
67 One use is as follows: a MUA may prefer to store data in a central\r
68 notmuch configuration file so that the data is accessible across\r
69 different machines, e.g. an addressbook.  The list command helps\r
70 to implement features such as tab completion on the keys.\r
71 ---\r
72  notmuch-config.c |   66 ++++++++++++++++++++++++++++++++++++++++++++++++++---\r
73  test/config      |    1 -\r
74  2 files changed, 62 insertions(+), 5 deletions(-)\r
75 \r
76 diff --git a/notmuch-config.c b/notmuch-config.c\r
77 index 85fc774..d5540ac 100644\r
78 --- a/notmuch-config.c\r
79 +++ b/notmuch-config.c\r
80 @@ -799,20 +799,78 @@ notmuch_config_command_set (void *ctx, char *item, int argc, char *argv[])\r
81      return ret;\r
82  }\r
83  \r
84 +static int\r
85 +notmuch_config_command_list (void *ctx)\r
86 +{\r
87 +    notmuch_config_t *config;\r
88 +    char **groups;\r
89 +    size_t g, groups_length;\r
90 +\r
91 +    config = notmuch_config_open (ctx, NULL, NULL);\r
92 +    if (config == NULL)\r
93 +       return 1;\r
94 +\r
95 +    groups = g_key_file_get_groups (config->key_file, &groups_length);\r
96 +    if (groups == NULL)\r
97 +       return 1;\r
98 +\r
99 +    for (g = 0; g < groups_length; g++) {\r
100 +       char **keys;\r
101 +       size_t k, keys_length;\r
102 +\r
103 +       keys = g_key_file_get_keys (config->key_file,\r
104 +                                   groups[g], &keys_length, NULL);\r
105 +       if (keys == NULL)\r
106 +           continue;\r
107 +\r
108 +       for (k = 0; k < keys_length; k++) {\r
109 +           char *value;\r
110 +\r
111 +           value = g_key_file_get_string (config->key_file,\r
112 +                                          groups[g], keys[k], NULL);\r
113 +           if (value != NULL) {\r
114 +               printf ("%s.%s=%s\n", groups[g], keys[k], value);\r
115 +               free (value);\r
116 +           }\r
117 +       }\r
118 +\r
119 +       g_strfreev (keys);\r
120 +    }\r
121 +\r
122 +    g_strfreev (groups);\r
123 +\r
124 +    notmuch_config_close (config);\r
125 +\r
126 +    return 0;\r
127 +}\r
128 +\r
129  int\r
130  notmuch_config_command (void *ctx, int argc, char *argv[])\r
131  {\r
132      argc--; argv++; /* skip subcommand argument */\r
133  \r
134 -    if (argc < 2) {\r
135 -       fprintf (stderr, "Error: notmuch config requires at least two arguments.\n");\r
136 +    if (argc < 1) {\r
137 +       fprintf (stderr, "Error: notmuch config requires at least one argument.\n");\r
138         return 1;\r
139      }\r
140  \r
141 -    if (strcmp (argv[0], "get") == 0)\r
142 +    if (strcmp (argv[0], "get") == 0) {\r
143 +       if (argc < 2) {\r
144 +           fprintf (stderr, "Error: notmuch config get requires at least "\r
145 +                    "two arguments.\n");\r
146 +           return 1;\r
147 +       }\r
148         return notmuch_config_command_get (ctx, argv[1]);\r
149 -    else if (strcmp (argv[0], "set") == 0)\r
150 +    } else if (strcmp (argv[0], "set") == 0) {\r
151 +       if (argc < 2) {\r
152 +           fprintf (stderr, "Error: notmuch config set requires at least "\r
153 +                    "two arguments.\n");\r
154 +           return 1;\r
155 +       }\r
156         return notmuch_config_command_set (ctx, argv[1], argc - 2, argv + 2);\r
157 +    } else if (strcmp (argv[0], "list") == 0) {\r
158 +       return notmuch_config_command_list (ctx);\r
159 +    }\r
160  \r
161      fprintf (stderr, "Unrecognized argument for notmuch config: %s\n",\r
162              argv[0]);\r
163 diff --git a/test/config b/test/config\r
164 index cce2abc..0fbc79b 100755\r
165 --- a/test/config\r
166 +++ b/test/config\r
167 @@ -23,7 +23,6 @@ yyy yyy\r
168  zzz zzz"\r
169  \r
170  test_begin_subtest "List all items"\r
171 -test_subtest_known_broken\r
172  notmuch config set database.path "/canonical/path"\r
173  output=$(notmuch config list)\r
174  test_expect_equal "$output" "\\r
175 -- \r
176 1.7.4.4\r
177 \r