On Sun, 23 Feb 2014, Tomi Ollila <tomi.oll...@iki.fi> wrote: > So that users may have email in subdir/.notmuch directories. > --- > > Compiles, current tests pass. might ignore database_path/.notmuch and > might descent into database_path/.../.notmuch :D > > Tomi > > > notmuch-new.c | 18 ++++++++++-------- > 1 file changed, 10 insertions(+), 8 deletions(-) > > diff --git a/notmuch-new.c b/notmuch-new.c > index 8529fdd..b17bd75 100644 > --- a/notmuch-new.c > +++ b/notmuch-new.c > @@ -344,7 +344,8 @@ add_file (notmuch_database_t *notmuch, const char > *filename, > static notmuch_status_t > add_files (notmuch_database_t *notmuch, > const char *path, > - add_files_state_t *state) > + add_files_state_t *state, > + int dirlevel)
I think this is ugly and makes the interface harder to use for indexing arbitrary paths. Instead, I suggest diff --git a/notmuch-new.c b/notmuch-new.c index 8529fdd3eac7..20bc33fca4bd 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -469,7 +469,8 @@ add_files (notmuch_database_t *notmuch, if (strcmp (entry->d_name, ".") == 0 || strcmp (entry->d_name, "..") == 0 || (is_maildir && strcmp (entry->d_name, "tmp") == 0) || - strcmp (entry->d_name, ".notmuch") == 0) + (strcmp (entry->d_name, ".notmuch") == 0 && + strcmp (path, notmuch_database_get_path (notmuch)) == 0)) continue; next = talloc_asprintf (notmuch, "%s/%s", path, entry->d_name); And similarly in count_files(), with the root db path passed as first argument (as the db is not open yet). BR, Jani. > { > DIR *dir = NULL; > struct dirent *entry = NULL; > @@ -469,11 +470,11 @@ add_files (notmuch_database_t *notmuch, > if (strcmp (entry->d_name, ".") == 0 || > strcmp (entry->d_name, "..") == 0 || > (is_maildir && strcmp (entry->d_name, "tmp") == 0) || > - strcmp (entry->d_name, ".notmuch") == 0) > + (dirlevel == 0 && strcmp (entry->d_name, ".notmuch") == 0)) > continue; > > next = talloc_asprintf (notmuch, "%s/%s", path, entry->d_name); > - status = add_files (notmuch, next, state); > + status = add_files (notmuch, next, state, dirlevel + 1); > if (status) { > ret = status; > goto DONE; > @@ -702,7 +703,8 @@ stop_progress_printing_timer (void) > * initialized to zero by the top-level caller before calling > * count_files). */ > static void > -count_files (const char *path, int *count, add_files_state_t *state) > +count_files (const char *path, int *count, add_files_state_t *state, > + int dirlevel) > { > struct dirent *entry = NULL; > char *next; > @@ -725,7 +727,7 @@ count_files (const char *path, int *count, > add_files_state_t *state) > */ > if (strcmp (entry->d_name, ".") == 0 || > strcmp (entry->d_name, "..") == 0 || > - strcmp (entry->d_name, ".notmuch") == 0 || > + (dirlevel == 0 && strcmp (entry->d_name, ".notmuch") == 0) || > _entry_in_ignore_list (entry->d_name, state)) > { > if (state->debug && _entry_in_ignore_list (entry->d_name, state)) > @@ -750,7 +752,7 @@ count_files (const char *path, int *count, > add_files_state_t *state) > fflush (stdout); > } > } else if (entry_type == S_IFDIR) { > - count_files (next, count, state); > + count_files (next, count, state, dirlevel + 1); > } > > free (next); > @@ -962,7 +964,7 @@ notmuch_new_command (notmuch_config_t *config, int argc, > char *argv[]) > int count; > > count = 0; > - count_files (db_path, &count, &add_files_state); > + count_files (db_path, &count, &add_files_state, 0); > if (interrupted) > return EXIT_FAILURE; > > @@ -1021,7 +1023,7 @@ notmuch_new_command (notmuch_config_t *config, int > argc, char *argv[]) > timer_is_active = TRUE; > } > > - ret = add_files (notmuch, db_path, &add_files_state); > + ret = add_files (notmuch, db_path, &add_files_state, 0); > if (ret) > goto DONE; > > -- > 1.8.4.2 > > _______________________________________________ > notmuch mailing list > notmuch@notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch _______________________________________________ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch