mirror of
https://git.notmuchmail.org/git/notmuch
synced 2025-01-03 07:11:41 +01:00
Make "notmuch new" ignore directories that are read-only.
With this, "notmuch new" is now plenty fast even with large archives spanning many sub-directories. Document this both in "notmuch help" and also in the output of notmuch setup.
This commit is contained in:
parent
ef944693c3
commit
c037dc5e53
1 changed files with 25 additions and 3 deletions
28
notmuch.c
28
notmuch.c
|
@ -54,6 +54,8 @@ typedef struct command {
|
||||||
} command_t;
|
} command_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
int ignore_read_only_directories;
|
||||||
|
|
||||||
int total_files;
|
int total_files;
|
||||||
int processed_files;
|
int processed_files;
|
||||||
int added_messages;
|
int added_messages;
|
||||||
|
@ -160,6 +162,16 @@ add_files_recursive (notmuch_database_t *notmuch,
|
||||||
time_t path_mtime, path_dbtime;
|
time_t path_mtime, path_dbtime;
|
||||||
notmuch_status_t status, ret = NOTMUCH_STATUS_SUCCESS;
|
notmuch_status_t status, ret = NOTMUCH_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
/* If we're told to, we bail out on encountering a read-only
|
||||||
|
* directory, (with this being a clear clue from the user to
|
||||||
|
* Notmuch that new mail won't be arriving there and we need not
|
||||||
|
* look. */
|
||||||
|
if (state->ignore_read_only_directories &&
|
||||||
|
(st->st_mode & S_IWUSR) == 0)
|
||||||
|
{
|
||||||
|
goto DONE;
|
||||||
|
}
|
||||||
|
|
||||||
path_mtime = st->st_mtime;
|
path_mtime = st->st_mtime;
|
||||||
|
|
||||||
path_dbtime = notmuch_database_get_timestamp (notmuch, path);
|
path_dbtime = notmuch_database_get_timestamp (notmuch, path);
|
||||||
|
@ -448,6 +460,7 @@ setup_command (int argc, char *argv[])
|
||||||
|
|
||||||
printf ("Next, we'll inspect the messages and create a database of threads:\n");
|
printf ("Next, we'll inspect the messages and create a database of threads:\n");
|
||||||
|
|
||||||
|
add_files_state.ignore_read_only_directories = FALSE;
|
||||||
add_files_state.total_files = count;
|
add_files_state.total_files = count;
|
||||||
add_files_state.processed_files = 0;
|
add_files_state.processed_files = 0;
|
||||||
add_files_state.added_messages = 0;
|
add_files_state.added_messages = 0;
|
||||||
|
@ -476,8 +489,12 @@ setup_command (int argc, char *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
printf ("When new mail is delivered to %s in the future,\n"
|
printf ("When new mail is delivered to %s in the future,\n"
|
||||||
"run \"notmuch new\" to add it to the database.\n",
|
"run \"notmuch new\" to add it to the database.\n\n",
|
||||||
mail_directory);
|
mail_directory);
|
||||||
|
printf ("And if you have any sub-directories that are archives (that is,\n"
|
||||||
|
"they will never receive new mail), marking these directores as\n"
|
||||||
|
"read-only (chmod u-w /path/to/dir) will make \"notmuch new\"\n"
|
||||||
|
"much more efficient (it won't even look in those directories).\n\n");
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
printf ("Note: At least one error was encountered: %s\n",
|
printf ("Note: At least one error was encountered: %s\n",
|
||||||
|
@ -511,6 +528,7 @@ new_command (int argc, char *argv[])
|
||||||
|
|
||||||
mail_directory = notmuch_database_get_path (notmuch);
|
mail_directory = notmuch_database_get_path (notmuch);
|
||||||
|
|
||||||
|
add_files_state.ignore_read_only_directories = TRUE;
|
||||||
add_files_state.total_files = 0;
|
add_files_state.total_files = 0;
|
||||||
add_files_state.processed_files = 0;
|
add_files_state.processed_files = 0;
|
||||||
add_files_state.added_messages = 0;
|
add_files_state.added_messages = 0;
|
||||||
|
@ -752,11 +770,15 @@ restore_command (int argc, char *argv[])
|
||||||
|
|
||||||
command_t commands[] = {
|
command_t commands[] = {
|
||||||
{ "setup", setup_command,
|
{ "setup", setup_command,
|
||||||
"Interactively setup notmuch for first use.\n"
|
"Interactively setup notmuch for first use.\n\n"
|
||||||
"\t\tInvoking notmuch with no command argument will run setup if\n"
|
"\t\tInvoking notmuch with no command argument will run setup if\n"
|
||||||
"\t\tthe setup command has not previously been completed." },
|
"\t\tthe setup command has not previously been completed." },
|
||||||
{ "new", new_command,
|
{ "new", new_command,
|
||||||
"Find and import any new messages."},
|
"Find and import any new messages.\n\n"
|
||||||
|
"\t\tScans all sub-directories of the database, adding new files\n"
|
||||||
|
"\t\tthat are found. Note: \"notmuch new\" will skip any\n"
|
||||||
|
"\t\tread-only directories, so you can use that to mark\n"
|
||||||
|
"\t\tdirectories that will not receive any new mail."},
|
||||||
{ "search", search_command,
|
{ "search", search_command,
|
||||||
"<search-term> [...]\n\n"
|
"<search-term> [...]\n\n"
|
||||||
"\t\tSearch for threads matching the given search terms.\n"
|
"\t\tSearch for threads matching the given search terms.\n"
|
||||||
|
|
Loading…
Reference in a new issue