]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch-config.c
notmuch setup: Fix new configuration-file groups to get comments
[notmuch] / notmuch-config.c
index ebddbf88222a57df2efc021c7299b43e19d5bc28..cadc6e61f9a1871fd0391c97419cc5161075e634 100644 (file)
@@ -68,7 +68,7 @@ struct _notmuch_config {
     char *user_primary_email;
     char **user_other_email;
     size_t user_other_email_length;
-    char **new_tags;
+    const char **new_tags;
     size_t new_tags_length;
 };
 
@@ -179,6 +179,9 @@ notmuch_config_open (void *ctx,
     int is_new = 0;
     size_t tmp;
     char *notmuch_config_env = NULL;
+    int file_had_database_group;
+    int file_had_messages_group;
+    int file_had_user_group;
 
     if (is_new_ret)
        *is_new_ret = 0;
@@ -235,6 +238,23 @@ notmuch_config_open (void *ctx,
        is_new = 1;
     }
 
+    /* Whenever we know of configuration sections that don't appear in
+     * the configuration file, we add some comments to help the user
+     * understand what can be done.
+     *
+     * It would be convenient to just add those comments now, but
+     * apparently g_key_file will clear any comments when keys are
+     * added later that create the groups. So we have to check for the
+     * groups now, but add the comments only after setting all of our
+     * values.
+     */
+    file_had_database_group = g_key_file_has_group (config->key_file,
+                                                   "database");
+    file_had_messages_group = g_key_file_has_group (config->key_file,
+                                                   "messages");
+    file_had_user_group = g_key_file_has_group (config->key_file, "user");
+
+
     if (notmuch_config_get_database_path (config) == NULL) {
        char *path = talloc_asprintf (config, "%s/mail",
                                      getenv ("HOME"));
@@ -283,15 +303,29 @@ notmuch_config_open (void *ctx,
        notmuch_config_set_new_tags (config, tags, 2);
     }
 
-    /* When we create a new configuration file here, we  add some
-     * comments to help the user understand what can be done. */
-    if (is_new) {
+    /* Whenever we know of configuration sections that don't appear in
+     * the configuration file, we add some comments to help the user
+     * understand what can be done. */
+    if (is_new)
+    {
        g_key_file_set_comment (config->key_file, NULL, NULL,
                                toplevel_config_comment, NULL);
+    }
+
+    if (! file_had_database_group)
+    {
        g_key_file_set_comment (config->key_file, "database", NULL,
                                database_config_comment, NULL);
+    }
+
+    if (! file_had_messages_group)
+    {
        g_key_file_set_comment (config->key_file, "messages", NULL,
                                messages_config_comment, NULL);
+    }
+
+    if (! file_had_user_group)
+    {
        g_key_file_set_comment (config->key_file, "user", NULL,
                                user_config_comment, NULL);
     }
@@ -474,7 +508,7 @@ notmuch_config_set_user_other_email (notmuch_config_t *config,
     config->user_other_email = NULL;
 }
 
-char **
+const char **
 notmuch_config_get_new_tags (notmuch_config_t *config,
                             size_t *length)
 {