]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch-new.c
Merge branch 'release'
[notmuch] / notmuch-new.c
index 33645349cd5fd8abdb5936e185b5f5c70d529c08..c55dea7bc1b7188522b2f2805fdf6a93ca12bf68 100644 (file)
@@ -13,7 +13,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see http://www.gnu.org/licenses/ .
+ * along with this program.  If not, see https://www.gnu.org/licenses/ .
  *
  * Author: Carl Worth <cworth@cworth.org>
  */
@@ -281,6 +281,10 @@ add_file (notmuch_database_t *notmuch, const char *filename,
        fprintf (stderr, "Note: Ignoring non-mail file: %s\n", filename);
        break;
     /* Fatal issues. Don't process anymore. */
+    case NOTMUCH_STATUS_FILE_ERROR:
+       fprintf (stderr, "Unexpected error with file %s\n", filename);
+       (void) print_status_database ("add_file", notmuch, status);
+       goto DONE;
     case NOTMUCH_STATUS_READ_ONLY_DATABASE:
     case NOTMUCH_STATUS_XAPIAN_EXCEPTION:
     case NOTMUCH_STATUS_OUT_OF_MEMORY:
@@ -347,7 +351,6 @@ add_files (notmuch_database_t *notmuch,
           const char *path,
           add_files_state_t *state)
 {
-    DIR *dir = NULL;
     struct dirent *entry = NULL;
     char *next = NULL;
     time_t fs_mtime, db_mtime;
@@ -445,7 +448,7 @@ add_files (notmuch_database_t *notmuch,
         */
        if (_entry_in_ignore_list (entry->d_name, state)) {
            if (state->debug)
-               printf ("(D) add_files_recursive, pass 1: explicitly ignoring %s/%s\n",
+               printf ("(D) add_files, pass 1: explicitly ignoring %s/%s\n",
                        path, entry->d_name);
            continue;
        }
@@ -513,9 +516,8 @@ add_files (notmuch_database_t *notmuch,
        /* Ignore files & directories user has configured to be ignored */
        if (_entry_in_ignore_list (entry->d_name, state)) {
            if (state->debug)
-               printf ("(D) add_files_recursive, pass 2: explicitly ignoring %s/%s\n",
-                       path,
-                       entry->d_name);
+               printf ("(D) add_files, pass 2: explicitly ignoring %s/%s\n",
+                       path, entry->d_name);
            continue;
        }
 
@@ -529,7 +531,7 @@ add_files (notmuch_database_t *notmuch,
                                              notmuch_filenames_get (db_files));
 
            if (state->debug)
-               printf ("(D) add_files_recursive, pass 2: queuing passed file %s for deletion from database\n",
+               printf ("(D) add_files, pass 2: queuing passed file %s for deletion from database\n",
                        absolute);
 
            _filename_list_add (state->removed_files, absolute);
@@ -547,7 +549,7 @@ add_files (notmuch_database_t *notmuch,
                char *absolute = talloc_asprintf (state->removed_directories,
                                                  "%s/%s", path, filename);
                if (state->debug)
-                   printf ("(D) add_files_recursive, pass 2: queuing passed directory %s for deletion from database\n",
+                   printf ("(D) add_files, pass 2: queuing passed directory %s for deletion from database\n",
                        absolute);
 
                _filename_list_add (state->removed_directories, absolute);
@@ -618,7 +620,7 @@ add_files (notmuch_database_t *notmuch,
                                          "%s/%s", path,
                                          notmuch_filenames_get (db_files));
        if (state->debug)
-           printf ("(D) add_files_recursive, pass 3: queuing leftover file %s for deletion from database\n",
+           printf ("(D) add_files, pass 3: queuing leftover file %s for deletion from database\n",
                    absolute);
 
        _filename_list_add (state->removed_files, absolute);
@@ -633,7 +635,7 @@ add_files (notmuch_database_t *notmuch,
                                          notmuch_filenames_get (db_subdirs));
 
        if (state->debug)
-           printf ("(D) add_files_recursive, pass 3: queuing leftover directory %s for deletion from database\n",
+           printf ("(D) add_files, pass 3: queuing leftover directory %s for deletion from database\n",
                    absolute);
 
        _filename_list_add (state->removed_directories, absolute);
@@ -652,8 +654,6 @@ add_files (notmuch_database_t *notmuch,
   DONE:
     if (next)
        talloc_free (next);
-    if (dir)
-       closedir (dir);
     if (fs_entries) {
        for (i = 0; i < num_fs_entries; i++)
            free (fs_entries[i]);
@@ -878,17 +878,11 @@ _remove_directory (void *ctx,
            goto DONE;
     }
 
-    /*
-     * XXX: The library does not have a function to remove a directory
-     * document for a path. Usually this doesn't matter except for a
-     * slight waste of space. However, if the directory gets added to
-     * the filesystem again, the old directory document is found with
-     * the old mtime. Reset the directory mtime to avoid problems.
-     */
-    notmuch_directory_set_mtime (directory, 0);
+    status = notmuch_directory_delete (directory);
 
   DONE:
-    notmuch_directory_destroy (directory);
+    if (status)
+       notmuch_directory_destroy (directory);
     return status;
 }
 
@@ -933,7 +927,11 @@ int
 notmuch_new_command (notmuch_config_t *config, int argc, char *argv[])
 {
     notmuch_database_t *notmuch;
-    add_files_state_t add_files_state;
+    add_files_state_t add_files_state = {
+       .verbosity = VERBOSITY_NORMAL,
+       .debug = FALSE,
+       .output_is_a_tty = isatty (fileno (stdout)),
+    };
     struct timeval tv_start;
     int ret = 0;
     struct stat st;
@@ -948,10 +946,6 @@ notmuch_new_command (notmuch_config_t *config, int argc, char *argv[])
     notmuch_bool_t quiet = FALSE, verbose = FALSE;
     notmuch_status_t status;
 
-    add_files_state.verbosity = VERBOSITY_NORMAL;
-    add_files_state.debug = FALSE;
-    add_files_state.output_is_a_tty = isatty (fileno (stdout));
-
     notmuch_opt_desc_t options[] = {
        { NOTMUCH_OPT_BOOLEAN,  &quiet, "quiet", 'q', 0 },
        { NOTMUCH_OPT_BOOLEAN,  &verbose, "verbose", 'v', 0 },
@@ -1048,7 +1042,7 @@ notmuch_new_command (notmuch_config_t *config, int argc, char *argv[])
            }
 
            if (notmuch_database_dump (notmuch, backup_name, "",
-                                      DUMP_FORMAT_BATCH_TAG, TRUE)) {
+                                      DUMP_FORMAT_BATCH_TAG, DUMP_INCLUDE_DEFAULT, TRUE)) {
                fprintf (stderr, "Backup failed. Aborting upgrade.");
                return EXIT_FAILURE;
            }
@@ -1086,9 +1080,6 @@ notmuch_new_command (notmuch_config_t *config, int argc, char *argv[])
     talloc_free (dot_notmuch_path);
     dot_notmuch_path = NULL;
 
-    add_files_state.processed_files = 0;
-    add_files_state.added_messages = 0;
-    add_files_state.removed_messages = add_files_state.renamed_messages = 0;
     gettimeofday (&add_files_state.tv_start, NULL);
 
     add_files_state.removed_files = _filename_list_create (config);