notmuch setup: Fix new configuration-file groups to get comments

Our intent has always been that when new configuration-file settings
are created by notmuch, that they get created with comments telling
the user how to use them. But this was only working before when the
entire configuration file was created.

We fix this so that when a new group is added, (such as the recently-
added [messages] section) that it gets its documentation.
This commit is contained in:
Carl Worth 2010-04-23 09:20:40 -07:00
parent 65d278afb1
commit 15e71cfda7

View file

@ -179,6 +179,9 @@ notmuch_config_open (void *ctx,
int is_new = 0; int is_new = 0;
size_t tmp; size_t tmp;
char *notmuch_config_env = NULL; char *notmuch_config_env = NULL;
int file_had_database_group;
int file_had_messages_group;
int file_had_user_group;
if (is_new_ret) if (is_new_ret)
*is_new_ret = 0; *is_new_ret = 0;
@ -235,6 +238,23 @@ notmuch_config_open (void *ctx,
is_new = 1; 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) { if (notmuch_config_get_database_path (config) == NULL) {
char *path = talloc_asprintf (config, "%s/mail", char *path = talloc_asprintf (config, "%s/mail",
getenv ("HOME")); getenv ("HOME"));
@ -283,15 +303,29 @@ notmuch_config_open (void *ctx,
notmuch_config_set_new_tags (config, tags, 2); notmuch_config_set_new_tags (config, tags, 2);
} }
/* When we create a new configuration file here, we add some /* Whenever we know of configuration sections that don't appear in
* comments to help the user understand what can be done. */ * the configuration file, we add some comments to help the user
if (is_new) { * understand what can be done. */
if (is_new)
{
g_key_file_set_comment (config->key_file, NULL, NULL, g_key_file_set_comment (config->key_file, NULL, NULL,
toplevel_config_comment, NULL); toplevel_config_comment, NULL);
}
if (! file_had_database_group)
{
g_key_file_set_comment (config->key_file, "database", NULL, g_key_file_set_comment (config->key_file, "database", NULL,
database_config_comment, NULL); database_config_comment, NULL);
}
if (! file_had_messages_group)
{
g_key_file_set_comment (config->key_file, "messages", NULL, g_key_file_set_comment (config->key_file, "messages", NULL,
messages_config_comment, NULL); messages_config_comment, NULL);
}
if (! file_had_user_group)
{
g_key_file_set_comment (config->key_file, "user", NULL, g_key_file_set_comment (config->key_file, "user", NULL,
user_config_comment, NULL); user_config_comment, NULL);
} }