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

Reply via email to