]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch-setup.c
test: Test upgrade to ghost messages feature
[notmuch] / notmuch-setup.c
index 482efd2e3b9b497fcd09089809cb4a3fcab99fc1..36a6171a695b2bde194eab0dab3a577c91e265fe 100644 (file)
@@ -76,7 +76,8 @@ welcome_message_post_setup (void)
 "Notmuch is now configured, and the configuration settings are saved in\n"
 "a file in your home directory named .notmuch-config . If you'd like to\n"
 "change the configuration in the future, you can either edit that file\n"
 "Notmuch is now configured, and the configuration settings are saved in\n"
 "a file in your home directory named .notmuch-config . If you'd like to\n"
 "change the configuration in the future, you can either edit that file\n"
-"directly or run \"notmuch setup\".\n\n"
+"directly or run \"notmuch setup\".  To choose an alternate configuration\n"
+"location, set ${NOTMUCH_CONFIG}.\n\n"
 
 "The next step is to run \"notmuch new\" which will create a database\n"
 "that indexes all of your mail. Depending on the amount of mail you have\n"
 
 "The next step is to run \"notmuch new\" which will create a database\n"
 "that indexes all of your mail. Depending on the amount of mail you have\n"
@@ -86,30 +87,65 @@ welcome_message_post_setup (void)
 "have sufficient storage space available now.\n\n");
 }
 
 "have sufficient storage space available now.\n\n");
 }
 
+static void
+print_tag_list (const char **tags, size_t tags_len)
+{
+    unsigned int i;
+    for (i = 0; i < tags_len; i++) {
+       if (i != 0)
+           printf (" ");
+       printf ("%s", tags[i]);
+    }
+}
+
+static GPtrArray *
+parse_tag_list (void *ctx, char *response)
+{
+    GPtrArray *tags = g_ptr_array_new ();
+    char *tag = response;
+    char *space;
+
+    while (tag && *tag) {
+       space = strchr (tag, ' ');
+       if (space)
+           g_ptr_array_add (tags, talloc_strndup (ctx, tag, space - tag));
+       else
+           g_ptr_array_add (tags, talloc_strdup (ctx, tag));
+       tag = space;
+       while (tag && *tag == ' ')
+           tag++;
+    }
+
+    return tags;
+}
+
 int
 int
-notmuch_setup_command (unused (void *ctx),
+notmuch_setup_command (notmuch_config_t *config,
                       unused (int argc), unused (char *argv[]))
 {
     char *response = NULL;
                       unused (int argc), unused (char *argv[]))
 {
     char *response = NULL;
-    size_t response_size;
-    notmuch_config_t *config;
-    char **old_other_emails;
+    size_t response_size = 0;
+    const char **old_other_emails;
     size_t old_other_emails_len;
     GPtrArray *other_emails;
     unsigned int i;
     size_t old_other_emails_len;
     GPtrArray *other_emails;
     unsigned int i;
-    int is_new;
-
-#define prompt(format, ...)                            \
-    do {                                               \
-       printf (format, ##__VA_ARGS__);                 \
-       fflush (stdout);                                \
-       getline (&response, &response_size, stdin);     \
-       chomp_newline (response);                       \
+    const char **new_tags;
+    size_t new_tags_len;
+    const char **search_exclude_tags;
+    size_t search_exclude_tags_len;
+
+#define prompt(format, ...)                                    \
+    do {                                                       \
+       printf (format, ##__VA_ARGS__);                         \
+       fflush (stdout);                                        \
+       if (getline (&response, &response_size, stdin) < 0) {   \
+           printf ("Exiting.\n");                              \
+           exit (EXIT_FAILURE);                                \
+       }                                                       \
+       chomp_newline (response);                               \
     } while (0)
 
     } while (0)
 
-    config = notmuch_config_open (ctx, NULL, &is_new);
-
-    if (is_new)
+    if (notmuch_config_is_new (config))
        welcome_message_pre_setup ();
 
     prompt ("Your full name [%s]: ", notmuch_config_get_user_name (config));
        welcome_message_pre_setup ();
 
     prompt ("Your full name [%s]: ", notmuch_config_get_user_name (config));
@@ -128,16 +164,16 @@ notmuch_setup_command (unused (void *ctx),
     for (i = 0; i < old_other_emails_len; i++) {
        prompt ("Additional email address [%s]: ", old_other_emails[i]);
        if (strlen (response))
     for (i = 0; i < old_other_emails_len; i++) {
        prompt ("Additional email address [%s]: ", old_other_emails[i]);
        if (strlen (response))
-           g_ptr_array_add (other_emails, talloc_strdup (ctx, response));
+           g_ptr_array_add (other_emails, talloc_strdup (config, response));
        else
        else
-           g_ptr_array_add (other_emails, talloc_strdup (ctx,
+           g_ptr_array_add (other_emails, talloc_strdup (config,
                                                         old_other_emails[i]));
     }
 
     do {
        prompt ("Additional email address [Press 'Enter' if none]: ");
        if (strlen (response))
                                                         old_other_emails[i]));
     }
 
     do {
        prompt ("Additional email address [Press 'Enter' if none]: ");
        if (strlen (response))
-           g_ptr_array_add (other_emails, talloc_strdup (ctx, response));
+           g_ptr_array_add (other_emails, talloc_strdup (config, response));
     } while (strlen (response));
     if (other_emails->len)
        notmuch_config_set_user_other_email (config,
     } while (strlen (response));
     if (other_emails->len)
        notmuch_config_set_user_other_email (config,
@@ -151,14 +187,47 @@ notmuch_setup_command (unused (void *ctx),
     if (strlen (response)) {
        const char *absolute_path;
 
     if (strlen (response)) {
        const char *absolute_path;
 
-       absolute_path = make_path_absolute (ctx, response);
+       absolute_path = make_path_absolute (config, response);
        notmuch_config_set_database_path (config, absolute_path);
     }
 
        notmuch_config_set_database_path (config, absolute_path);
     }
 
-    notmuch_config_save (config);
+    new_tags = notmuch_config_get_new_tags (config, &new_tags_len);
+
+    printf ("Tags to apply to all new messages (separated by spaces) [");
+    print_tag_list (new_tags, new_tags_len);
+    prompt ("]: ");
+
+    if (strlen (response)) {
+       GPtrArray *tags = parse_tag_list (config, response);
+
+       notmuch_config_set_new_tags (config, (const char **) tags->pdata,
+                                    tags->len);
+
+       g_ptr_array_free (tags, TRUE);
+    }
+
+
+    search_exclude_tags = notmuch_config_get_search_exclude_tags (config, &search_exclude_tags_len);
+
+    printf ("Tags to exclude when searching messages (separated by spaces) [");
+    print_tag_list (search_exclude_tags, search_exclude_tags_len);
+    prompt ("]: ");
+
+    if (strlen (response)) {
+       GPtrArray *tags = parse_tag_list (config, response);
+
+       notmuch_config_set_search_exclude_tags (config,
+                                               (const char **) tags->pdata,
+                                               tags->len);
+
+       g_ptr_array_free (tags, TRUE);
+    }
+
+    if (notmuch_config_save (config))
+       return EXIT_FAILURE;
 
 
-    if (is_new)
+    if (notmuch_config_is_new (config))
        welcome_message_post_setup ();
 
        welcome_message_post_setup ();
 
-    return 0;
+    return EXIT_SUCCESS;
 }
 }