[DRAFT PATCH] notmuch new: do not ignore '.notmuch' in non-toplevel directories
Jani Nikula
jani at nikula.org
Sun Feb 23 14:22:10 PST 2014
On Sun, 23 Feb 2014, Tomi Ollila <tomi.ollila at 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 at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch
More information about the notmuch
mailing list