]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch.c
notmuch_database_open: Fix error message for file-not-found.
[notmuch] / notmuch.c
index 01000c2a823c8edc815addca4534e2a8b44ff962..d35bda7263085f63ce644598e0c07a240ecbfb2e 100644 (file)
--- a/notmuch.c
+++ b/notmuch.c
@@ -285,7 +285,7 @@ int
 setup_command (int argc, char *argv[])
 {
     notmuch_database_t *notmuch;
-    char *mail_directory;
+    char *mail_directory, *default_path;
     int count;
     add_files_state_t add_files_state;
     double elapsed;
@@ -310,25 +310,32 @@ setup_command (int argc, char *argv[])
            "such as mb2md. In that case, press Control-C now and run notmuch again\n"
            "once the conversion is complete.\n\n");
 
-    printf ("Top-level mail directory [~/mail]: ");
+
+    default_path = notmuch_database_default_path ();
+    printf ("Top-level mail directory [%s]: ", default_path);
     fflush (stdout);
 
     mail_directory = read_line ();
+    printf ("\n");
 
     if (mail_directory == NULL || strlen (mail_directory) == 0) {
-       char *home;
-
        if (mail_directory)
            free (mail_directory);
-
-       home = getenv ("HOME");
-       if (!home) {
-           fprintf (stderr, "Error: No mail directory provided HOME environment variable is not set.\n");
-           fprintf (stderr, "Cowardly refusing to just guess where your mail might be.\n");
-           exit (1);
+       mail_directory = default_path;
+    } else {
+       /* XXX: Instead of telling the user to use an environment
+        * variable here, we should really be writing out a configuration
+        * file and loading that on the next run. */
+       if (strcmp (mail_directory, default_path)) {
+           printf ("Note: Since you are not using the default path, you will want to set\n"
+                   "the NOTMUCH_BASE environment variable to %s so that\n"
+                   "future calls to notmuch commands will know where to find your mail.\n",
+                   mail_directory);
+           printf ("For example, if you are using bash for your shell, add:\n\n");
+           printf ("\texport NOTMUCH_BASE=%s\n\n", mail_directory);
+           printf ("to your ~/.bashrc file.\n\n");
        }
-
-       mail_directory = g_strdup_printf ("%s/mail", home);
+       free (default_path);
     }
 
     notmuch = notmuch_database_create (mail_directory);
@@ -379,19 +386,49 @@ search_command (int argc, char *argv[])
 int
 show_command (int argc, char *argv[])
 {
-    fprintf (stderr, "Error: show-thread is not implemented yet.\n");
+    fprintf (stderr, "Error: show is not implemented yet.\n");
+    return 1;
+}
+
+int
+dump_command (int argc, char *argv[])
+{
+    fprintf (stderr, "Error: dump is not implemented yet.\n");
+    return 1;
+}
+
+int
+restore_command (int argc, char *argv[])
+{
+    fprintf (stderr, "Error: restore is not implemented yet.\n");
     return 1;
 }
 
 command_t commands[] = {
     { "setup", setup_command,
-      "Interactively setup notmuch for first use (no arguments).\n"
+      "Interactively setup notmuch for first use.\n"
       "\t\tInvoking notmuch with no command argument will run setup if\n"
-      "\t\the setup command has not previously been completed." },
+      "\t\tthe setup command has not previously been completed." },
     { "search", search_command,
-      "Search for threads matching the given search terms." },
+      "<search-term> [...]\n\n"
+      "\t\tSearch for threads matching the given search terms.\n"
+      "\t\tOnce we actually implement search we'll document the\n"
+      "\t\tsyntax here." },
     { "show", show_command,
-      "Show the thread with the given thread ID (see 'search')." }
+      "<thread-id>\n\n"
+      "\t\tShow the thread with the given thread ID (see 'search')." },
+    { "dump", dump_command,
+      "[<filename>]\n\n"
+      "\t\tCreate a plain-text dump of the tags for each message\n"
+      "\t\twriting to the given filename, if any, or to stdout.\n"
+      "\t\tThese tags are the only data in the notmuch database\n"
+      "\t\tthat can't be recreated from the messages themselves.\n"
+      "\t\tThe output of notmuch dump is therefore the only\n"
+      "\t\tcritical thing to backup (and much more friendly to\n"
+      "\t\tincremental backup than the native database files." },
+    { "restore", restore_command,
+      "<filename>\n\n"
+      "\t\tRestore the tags from the given dump file (see 'dump')." }
 };
 
 void
@@ -402,7 +439,7 @@ usage (void)
 
     fprintf (stderr, "Usage: notmuch <command> [args...]\n");
     fprintf (stderr, "\n");
-    fprintf (stderr, "Where <command> is one of the following:\n");
+    fprintf (stderr, "Where <command> and [args...] are as follows:\n");
     fprintf (stderr, "\n");
 
     for (i = 0; i < ARRAY_SIZE (commands); i++) {
@@ -428,7 +465,15 @@ main (int argc, char *argv[])
            return (command->function) (argc - 2, &argv[2]);
     }
 
-    fprintf (stderr, "Error: Unknown command '%s'\n\n", argv[1]);
+    /* Don't complain about "help" being an unknown command when we're
+       about to provide exactly what's wanted anyway. */
+    if (strcmp (argv[1], "help") == 0 ||
+       strcmp (argv[1], "--help") == 0)
+    {
+       fprintf (stderr, "The notmuch mail system.\n\n");
+    } else {
+       fprintf (stderr, "Error: Unknown command '%s'\n\n", argv[1]);
+    }
     usage ();
     exit (1);