]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch-new.c
test: initial performance testing infrastructure
[notmuch] / notmuch-new.c
index c64f1a779d5d4ba107e996432119e4d533955d7f..56c4a6fdd62a3f25709de37730bd0864532bf5bb 100644 (file)
@@ -37,6 +37,7 @@ typedef struct _filename_list {
 typedef struct {
     int output_is_a_tty;
     int verbose;
+    int debug;
     const char **new_tags;
     size_t new_tags_length;
     const char **new_ignore;
@@ -281,9 +282,9 @@ _entry_in_ignore_list (const char *entry, add_files_state_t *state)
  *     if fs_mtime isn't the current wall-clock time.
  */
 static notmuch_status_t
-add_files_recursive (notmuch_database_t *notmuch,
-                    const char *path,
-                    add_files_state_t *state)
+add_files (notmuch_database_t *notmuch,
+          const char *path,
+          add_files_state_t *state)
 {
     DIR *dir = NULL;
     struct dirent *entry = NULL;
@@ -308,11 +309,10 @@ add_files_recursive (notmuch_database_t *notmuch,
     }
     stat_time = time (NULL);
 
-    /* This is not an error since we may have recursed based on a
-     * symlink to a regular file, not a directory, and we don't know
-     * that until this stat. */
-    if (! S_ISDIR (st.st_mode))
-       return NOTMUCH_STATUS_SUCCESS;
+    if (! S_ISDIR (st.st_mode)) {
+       fprintf (stderr, "Error: %s is not a directory.\n", path);
+       return NOTMUCH_STATUS_FILE_ERROR;
+    }
 
     fs_mtime = st.st_mtime;
 
@@ -374,11 +374,15 @@ add_files_recursive (notmuch_database_t *notmuch,
            strcmp (entry->d_name, ".notmuch") == 0 ||
            _entry_in_ignore_list (entry->d_name, state))
        {
+           if (_entry_in_ignore_list (entry->d_name, state) && state->debug)
+               printf ("(D) add_files_recursive, pass 1: explicitly ignoring %s/%s\n",
+                       path,
+                       entry->d_name);
            continue;
        }
 
        next = talloc_asprintf (notmuch, "%s/%s", path, entry->d_name);
-       status = add_files_recursive (notmuch, next, state);
+       status = add_files (notmuch, next, state);
        if (status) {
            ret = status;
            goto DONE;
@@ -415,8 +419,13 @@ add_files_recursive (notmuch_database_t *notmuch,
         entry = fs_entries[i];
 
        /* Ignore files & directories user has configured to be ignored */
-       if (_entry_in_ignore_list (entry->d_name, state))
+       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);
            continue;
+       }
 
        /* Check if we've walked past any names in db_files or
         * db_subdirs. If so, these have been deleted. */
@@ -648,32 +657,6 @@ stop_progress_printing_timer (void)
 }
 
 
-/* This is the top-level entry point for add_files. It does a couple
- * of error checks and then calls into the recursive function. */
-static notmuch_status_t
-add_files (notmuch_database_t *notmuch,
-          const char *path,
-          add_files_state_t *state)
-{
-    notmuch_status_t status;
-    struct stat st;
-
-    if (stat (path, &st)) {
-       fprintf (stderr, "Error reading directory %s: %s\n",
-                path, strerror (errno));
-       return NOTMUCH_STATUS_FILE_ERROR;
-    }
-
-    if (! S_ISDIR (st.st_mode)) {
-       fprintf (stderr, "Error: %s is not a directory.\n", path);
-       return NOTMUCH_STATUS_FILE_ERROR;
-    }
-
-    status = add_files_recursive (notmuch, path, state);
-
-    return status;
-}
-
 /* XXX: This should be merged with the add_files function since it
  * shares a lot of logic with it. */
 /* Recursively count all regular files in path and all sub-directories
@@ -711,6 +694,10 @@ count_files (const char *path, int *count, add_files_state_t *state)
            strcmp (entry->d_name, ".notmuch") == 0 ||
            _entry_in_ignore_list (entry->d_name, state))
        {
+           if (_entry_in_ignore_list (entry->d_name, state) && state->debug)
+               printf ("(D) count_files: explicitly ignoring %s/%s\n",
+                       path,
+                       entry->d_name);
            continue;
        }
 
@@ -867,6 +854,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[])
     notmuch_bool_t run_hooks = TRUE;
 
     add_files_state.verbose = 0;
+    add_files_state.debug = 0;
     add_files_state.output_is_a_tty = isatty (fileno (stdout));
 
     argc--; argv++; /* skip subcommand argument */
@@ -874,6 +862,8 @@ notmuch_new_command (void *ctx, int argc, char *argv[])
     for (i = 0; i < argc && argv[i][0] == '-'; i++) {
        if (STRNCMP_LITERAL (argv[i], "--verbose") == 0) {
            add_files_state.verbose = 1;
+       } else if (strcmp (argv[i], "--debug") == 0) {
+           add_files_state.debug = 1;
        } else if (strcmp (argv[i], "--no-hooks") == 0) {
            run_hooks = FALSE;
        } else {