[DRAFT PATCH] notmuch new: do not ignore '.notmuch' in non-toplevel directories
Tomi Ollila
tomi.ollila at iki.fi
Sun Feb 23 11:18:47 PST 2014
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)
{
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
More information about the notmuch
mailing list