* [PATCH 0/3] Configuration file option to exclude files/directories @ 2011-09-13 21:32 tomi.ollila 2011-09-13 21:32 ` [PATCH 1/3] added function notmuch_talloc_g_key_file_get_string_list() tomi.ollila ` (6 more replies) 0 siblings, 7 replies; 58+ messages in thread From: tomi.ollila @ 2011-09-13 21:32 UTC (permalink / raw) To: notmuch This patch set adds a configuration option 'database.exclude'; a list of files/directories to be excluded when doing 'notmuch new' operation. Notes: 1) Currently the comments for newly created configuration file are not updated, so for not this is 'undocumented feature'. Should there be an empty configuration line as a placeholder ... ? 2) Whenever some already existing directory is added to the exclude list and the parent directory timestamp has not changed, notmuch new will not notice the directory has gone (as it still is there), user needs to 'touch' the parent directory before next 'notmuch new' no make notmuch notice. 3) count_files() function is not touched. The functionality there has fallen behind of add_files_recursive (maildir+tmp check and following symlinks). The question there should it be updated, or attempted to merge with add_files (as the comment says). count_files() is only called at the beginning when database is not yet initialised. Tomi notmuch-client.h | 3 ++ notmuch-config.c | 89 +++++++++++++++++++++++++++++++++++++++-------------- notmuch-new.c | 22 ++++++++++++- 3 files changed, 88 insertions(+), 26 deletions(-) ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH 1/3] added function notmuch_talloc_g_key_file_get_string_list() 2011-09-13 21:32 [PATCH 0/3] Configuration file option to exclude files/directories tomi.ollila @ 2011-09-13 21:32 ` tomi.ollila 2011-09-13 21:32 ` [PATCH 2/3] Made notmuch_config_get_new_tags() use notmuch_talloc_g_key_file_get_string_list() tomi.ollila ` (5 subsequent siblings) 6 siblings, 0 replies; 58+ messages in thread From: tomi.ollila @ 2011-09-13 21:32 UTC (permalink / raw) To: notmuch; +Cc: Tomi Ollila From: Tomi Ollila <tomi.ollila@iki.fi> The function notmuch_talloc_g_key_file_get_string_list() wraps call to g_key_file_get_string_list() in a way that the returned string array is copied to talloc'd memory area. The returned pointer is itself also a talloc context, child of the context given as first argument. --- notmuch-config.c | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 41 insertions(+), 3 deletions(-) diff --git a/notmuch-config.c b/notmuch-config.c index 485fa72..706f481 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -170,6 +170,44 @@ get_username_from_passwd_file (void *ctx) return name; } +/** XXX move to (not-yet-existent) notmuch-talloc.c, or somewhere */ +static char ** +notmuch_talloc_g_key_file_get_string_list (const void * ctx, + GKeyFile *key_file, + const gchar *group_name, + const gchar *key, + gsize *length, + GError **error) +{ + char ** newlist; + gchar ** strlist = g_key_file_get_string_list (key_file, group_name, key, + length, error); + if (strlist) { + int i; + int l = *length; + + newlist = talloc_array (ctx, char *, l + 1); + if (newlist == NULL) + goto fail1; + for (i = 0; i < l; i++) { + if ( (newlist[i] = talloc_strdup (newlist, strlist[i])) == NULL) + goto fail2; + } + newlist[i] = NULL; + g_strfreev (strlist); + + return newlist; + } + return NULL; + +fail2: + talloc_free (newlist); +fail1: + g_strfreev (strlist); + *length = 0; /* like in g_key_file_get_string_list () */ + return NULL; +} + /* Open the named notmuch configuration file. If the filename is NULL, * the value of the environment variable $NOTMUCH_CONFIG will be used. * If $NOTMUCH_CONFIG is unset, the default configuration file @@ -229,7 +267,7 @@ notmuch_config_open (void *ctx, fprintf (stderr, "Out of memory.\n"); return NULL; } - + talloc_set_destructor (config, notmuch_config_destructor); if (filename) { @@ -393,7 +431,7 @@ notmuch_config_open (void *ctx, } /* Close the given notmuch_config_t object, freeing all resources. - * + * * Note: Any changes made to the configuration are *not* saved by this * function. To save changes, call notmuch_config_save before * notmuch_config_close. @@ -653,7 +691,7 @@ notmuch_config_command_get (void *ctx, char *item) } else if (strcmp(item, "user.other_email") == 0) { const char **other_email; size_t i, length; - + other_email = notmuch_config_get_user_other_email (config, &length); for (i = 0; i < length; i++) printf ("%s\n", other_email[i]); -- 1.7.3.4 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* [PATCH 2/3] Made notmuch_config_get_new_tags() use notmuch_talloc_g_key_file_get_string_list(). 2011-09-13 21:32 [PATCH 0/3] Configuration file option to exclude files/directories tomi.ollila 2011-09-13 21:32 ` [PATCH 1/3] added function notmuch_talloc_g_key_file_get_string_list() tomi.ollila @ 2011-09-13 21:32 ` tomi.ollila 2011-09-13 21:32 ` [PATCH 3/3] added support for user-specified directories to exclude tomi.ollila ` (4 subsequent siblings) 6 siblings, 0 replies; 58+ messages in thread From: tomi.ollila @ 2011-09-13 21:32 UTC (permalink / raw) To: notmuch; +Cc: Tomi Ollila From: Tomi Ollila <tomi.ollila@iki.fi> --- notmuch-config.c | 26 +++++--------------------- 1 files changed, 5 insertions(+), 21 deletions(-) diff --git a/notmuch-config.c b/notmuch-config.c index 706f481..648639b 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -606,29 +606,13 @@ const char ** notmuch_config_get_new_tags (notmuch_config_t *config, size_t *length) { - char **tags; - size_t tags_length; - unsigned int i; - if (config->new_tags == NULL) { - tags = g_key_file_get_string_list (config->key_file, - "new", "tags", - &tags_length, NULL); - if (tags) { - config->new_tags = talloc_size (config, - sizeof (char *) * - (tags_length + 1)); - for (i = 0; i < tags_length; i++) - config->new_tags[i] = talloc_strdup (config->new_tags, - tags[i]); - config->new_tags[i] = NULL; - - g_strfreev (tags); - - config->new_tags_length = tags_length; - } + config->new_tags = notmuch_talloc_g_key_file_get_string_list( + config, + config->key_file, + "new", "tags", + &config->new_tags_length, NULL); } - *length = config->new_tags_length; return config->new_tags; } -- 1.7.3.4 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* [PATCH 3/3] added support for user-specified directories to exclude 2011-09-13 21:32 [PATCH 0/3] Configuration file option to exclude files/directories tomi.ollila 2011-09-13 21:32 ` [PATCH 1/3] added function notmuch_talloc_g_key_file_get_string_list() tomi.ollila 2011-09-13 21:32 ` [PATCH 2/3] Made notmuch_config_get_new_tags() use notmuch_talloc_g_key_file_get_string_list() tomi.ollila @ 2011-09-13 21:32 ` tomi.ollila 2011-12-07 23:51 ` [PATCH 0/3] Configuration file option to exclude files/directories David Bremner ` (3 subsequent siblings) 6 siblings, 0 replies; 58+ messages in thread From: tomi.ollila @ 2011-09-13 21:32 UTC (permalink / raw) To: notmuch; +Cc: Tomi Ollila From: Tomi Ollila <tomi.ollila@iki.fi> A new configuration key 'database.exclude' is used to determine which directories user wants not to be scanned for new mails. --- notmuch-client.h | 3 +++ notmuch-config.c | 19 +++++++++++++++++++ notmuch-new.c | 22 ++++++++++++++++++++-- 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/notmuch-client.h b/notmuch-client.h index b50cb38..503ac79 100644 --- a/notmuch-client.h +++ b/notmuch-client.h @@ -197,6 +197,9 @@ void notmuch_config_set_database_path (notmuch_config_t *config, const char *database_path); +const char ** +notmuch_config_get_database_exclude (notmuch_config_t *config, + size_t *length); const char * notmuch_config_get_user_name (notmuch_config_t *config); diff --git a/notmuch-config.c b/notmuch-config.c index 648639b..b628074 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -88,6 +88,8 @@ struct _notmuch_config { GKeyFile *key_file; char *database_path; + const char **database_exclude; + size_t database_exclude_length; char *user_name; char *user_primary_email; const char **user_other_email; @@ -282,6 +284,8 @@ notmuch_config_open (void *ctx, config->key_file = g_key_file_new (); config->database_path = NULL; + config->database_exclude = NULL; + config->database_exclude_length = 0; config->user_name = NULL; config->user_primary_email = NULL; config->user_other_email = NULL; @@ -502,6 +506,21 @@ notmuch_config_set_database_path (notmuch_config_t *config, config->database_path = NULL; } +const char ** +notmuch_config_get_database_exclude (notmuch_config_t *config, + size_t *length) +{ + if (config->database_exclude == NULL) { + config->database_exclude = notmuch_talloc_g_key_file_get_string_list( + config, + config->key_file, + "database", "exclude", + &config->database_exclude_length, NULL); + } + *length = config->database_exclude_length; + return config->database_exclude; +} + const char * notmuch_config_get_user_name (notmuch_config_t *config) { diff --git a/notmuch-new.c b/notmuch-new.c index 7d17793..36da15f 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -38,6 +38,8 @@ typedef struct { int verbose; const char **new_tags; size_t new_tags_length; + const char **database_exclude; + size_t database_exclude_length; int total_files; int processed_files; @@ -293,6 +295,8 @@ add_files_recursive (notmuch_database_t *notmuch, is_maildir = _entries_resemble_maildir (fs_entries, num_fs_entries); for (i = 0; i < num_fs_entries; i++) { + size_t j; + if (interrupted) break; @@ -316,8 +320,6 @@ add_files_recursive (notmuch_database_t *notmuch, * Also ignore the .notmuch directory and any "tmp" directory * that appears within a maildir. */ - /* XXX: Eventually we'll want more sophistication to let the - * user specify files to be ignored. */ if (strcmp (entry->d_name, ".") == 0 || strcmp (entry->d_name, "..") == 0 || (is_maildir && strcmp (entry->d_name, "tmp") == 0) || @@ -325,6 +327,12 @@ add_files_recursive (notmuch_database_t *notmuch, { continue; } + /* Ignore user-specified directories */ + for (j = 0; j < state->database_exclude_length; j++) + if (strcmp(entry->d_name, state->database_exclude[j]) == 0) + break; + if (j < state->database_exclude_length) + continue; next = talloc_asprintf (notmuch, "%s/%s", path, entry->d_name); status = add_files_recursive (notmuch, next, state); @@ -357,11 +365,20 @@ add_files_recursive (notmuch_database_t *notmuch, /* Pass 2: Scan for new files, removed files, and removed directories. */ for (i = 0; i < num_fs_entries; i++) { + size_t j; + if (interrupted) break; entry = fs_entries[i]; + /* Ignore user-specified files & directories */ + for (j = 0; j < state->database_exclude_length; j++) + if (strcmp(entry->d_name, state->database_exclude[j]) == 0) + break; + if (j < state->database_exclude_length) + continue; + /* Check if we've walked past any names in db_files or * db_subdirs. If so, these have been deleted. */ while (notmuch_filenames_valid (db_files) && @@ -800,6 +817,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) return 1; add_files_state.new_tags = notmuch_config_get_new_tags (config, &add_files_state.new_tags_length); + add_files_state.database_exclude = notmuch_config_get_database_exclude (config, &add_files_state.database_exclude_length); add_files_state.synchronize_flags = notmuch_config_get_maildir_synchronize_flags (config); add_files_state.message_ids_to_sync = _filename_list_create (ctx); db_path = notmuch_config_get_database_path (config); -- 1.7.3.4 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: [PATCH 0/3] Configuration file option to exclude files/directories 2011-09-13 21:32 [PATCH 0/3] Configuration file option to exclude files/directories tomi.ollila ` (2 preceding siblings ...) 2011-09-13 21:32 ` [PATCH 3/3] added support for user-specified directories to exclude tomi.ollila @ 2011-12-07 23:51 ` David Bremner 2011-12-08 0:24 ` Tom Prince 2011-12-08 9:05 ` Tomi Ollila 2012-01-31 16:28 ` [PATCH] added support for user-specified files & directories to ignore Tomi Ollila ` (2 subsequent siblings) 6 siblings, 2 replies; 58+ messages in thread From: David Bremner @ 2011-12-07 23:51 UTC (permalink / raw) To: tomi.ollila, notmuch On Wed, 14 Sep 2011 00:32:01 +0300, tomi.ollila@iki.fi wrote: > This patch set adds a configuration option 'database.exclude'; a list of > files/directories to be excluded when doing 'notmuch new' operation. Hi All; I could see idea of excluding spam and trash folders from indexing being useful, but this has been sitting in the list for a few months without comment. Does that mean no-one but Tomi thinks the functionality is interesting? Or it just slipped by? d ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH 0/3] Configuration file option to exclude files/directories 2011-12-07 23:51 ` [PATCH 0/3] Configuration file option to exclude files/directories David Bremner @ 2011-12-08 0:24 ` Tom Prince 2011-12-08 9:05 ` Tomi Ollila 1 sibling, 0 replies; 58+ messages in thread From: Tom Prince @ 2011-12-08 0:24 UTC (permalink / raw) To: David Bremner, tomi.ollila, notmuch On Wed, 07 Dec 2011 19:51:32 -0400, David Bremner <david@tethera.net> wrote: > I could see idea of excluding spam and trash folders from indexing being > useful, but this has been sitting in the list for a few months without > comment. Does that mean no-one but Tomi thinks the functionality is > interesting? Or it just slipped by? A while a go, I had hacked the code to add .git to the list of excluded dirctories, and I have since just moved .git under .notmuch. I think this ability would be useful. Tom ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH 0/3] Configuration file option to exclude files/directories 2011-12-07 23:51 ` [PATCH 0/3] Configuration file option to exclude files/directories David Bremner 2011-12-08 0:24 ` Tom Prince @ 2011-12-08 9:05 ` Tomi Ollila 2012-01-25 0:46 ` Pieter Praet 2012-01-25 6:28 ` [PATCH 0/3] Configuration file option to exclude files/directories David Edmondson 1 sibling, 2 replies; 58+ messages in thread From: Tomi Ollila @ 2011-12-08 9:05 UTC (permalink / raw) To: David Bremner, notmuch On Wed, 07 Dec 2011 19:51:32 -0400, David Bremner <david@tethera.net> wrote: > On Wed, 14 Sep 2011 00:32:01 +0300, tomi.ollila@iki.fi wrote: > > This patch set adds a configuration option 'database.exclude'; a list of > > files/directories to be excluded when doing 'notmuch new' operation. > > Hi All; > > I could see idea of excluding spam and trash folders from indexing being > useful, but this has been sitting in the list for a few months without > comment. Does that mean no-one but Tomi thinks the functionality is > interesting? Or it just slipped by? Well, basically due to my comments in id:"1315949524-4948-1-git-send-email-tomi.ollila@iki.fi" (and so far little interest to this patch series) I have 'drafts' and 'spam' directories elsewhere. If there is renewed interests with real use cases I'm interested to make this work more complete (now that there is change to get patches in ;) -- and then move my drafts and spam under database.path too. I'll mark the current patches as 'notmuch::wip' for the time being. > > d > Tomi ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH 0/3] Configuration file option to exclude files/directories 2011-12-08 9:05 ` Tomi Ollila @ 2012-01-25 0:46 ` Pieter Praet 2012-01-26 10:11 ` [PATCH 1/2] moved _notmuch_get_list () and _notmuch_set_list () up in file Tomi Ollila 2012-01-25 6:28 ` [PATCH 0/3] Configuration file option to exclude files/directories David Edmondson 1 sibling, 1 reply; 58+ messages in thread From: Pieter Praet @ 2012-01-25 0:46 UTC (permalink / raw) To: Tomi Ollila, David Bremner, notmuch On Thu, 08 Dec 2011 11:05:50 +0200, Tomi Ollila <tomi.ollila@iki.fi> wrote: > On Wed, 07 Dec 2011 19:51:32 -0400, David Bremner <david@tethera.net> wrote: > > On Wed, 14 Sep 2011 00:32:01 +0300, tomi.ollila@iki.fi wrote: > > > This patch set adds a configuration option 'database.exclude'; a list of > > > files/directories to be excluded when doing 'notmuch new' operation. > > > > Hi All; > > > > I could see idea of excluding spam and trash folders from indexing being > > useful, but this has been sitting in the list for a few months without > > comment. Does that mean no-one but Tomi thinks the functionality is > > interesting? Or it just slipped by? > > Well, basically due to my comments in > id:"1315949524-4948-1-git-send-email-tomi.ollila@iki.fi" (and so far little > interest to this patch series) I have 'drafts' and 'spam' directories > elsewhere. > > If there is renewed interests with real use cases I'm interested to make > this work more complete (now that there is change to get patches in ;) > -- and then move my drafts and spam under database.path too. > Please do! The desire to be able to exclude certain files/folders has been expressed many times in the past [1], and once again a mere 2 days ago [2]. I'm currently kicking myself for somehow having missed this thread... Many thanks in advance! > I'll mark the current patches as 'notmuch::wip' for the time being. > > > > > d > > > > Tomi > _______________________________________________ > notmuch mailing list > notmuch@notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch Peace -- Pieter [1] id:"AANLkTikddX=fYiDmnN2Jx3ERcJndw=80+5_07=M45MQ=@mail.gmail.com" [2] id:"20120122113212.GA7084@X200" ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH 1/2] moved _notmuch_get_list () and _notmuch_set_list () up in file 2012-01-25 0:46 ` Pieter Praet @ 2012-01-26 10:11 ` Tomi Ollila 2012-01-26 10:11 ` [PATCH 2/2] added support for user-specified directories to exclude Tomi Ollila 2012-01-26 13:03 ` [PATCH 1/2] moved _notmuch_get_list () and _notmuch_set_list () up in file Jani Nikula 0 siblings, 2 replies; 58+ messages in thread From: Tomi Ollila @ 2012-01-26 10:11 UTC (permalink / raw) To: notmuch; +Cc: Tomi Ollila Moved _notmuch_get_list () and _notmuch_set_list () to a location in notmuch-config.c so that new functions that will be located before the old location of those functions can also use these. --- This patch is independent of the next one (just required by it) and can (should) be pushed early. notmuch-config.c | 84 +++++++++++++++++++++++++++--------------------------- 1 files changed, 42 insertions(+), 42 deletions(-) diff --git a/notmuch-config.c b/notmuch-config.c index 0ded6d7..a124e34 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -467,6 +467,48 @@ notmuch_config_save (notmuch_config_t *config) return 0; } +static const char ** +_config_get_list (notmuch_config_t *config, + const char *section, const char *key, + const char ***outlist, size_t *list_length, size_t *ret_length) +{ + assert(outlist); + + if (*outlist == NULL) { + + char **inlist = g_key_file_get_string_list (config->key_file, + section, key, list_length, NULL); + if (inlist) { + unsigned int i; + + *outlist = talloc_size (config, sizeof (char *) * (*list_length + 1)); + + for (i = 0; i < *list_length; i++) + (*outlist)[i] = talloc_strdup (*outlist, inlist[i]); + + (*outlist)[i] = NULL; + + g_strfreev (inlist); + } + } + + if (ret_length) + *ret_length = *list_length; + + return *outlist; +} + +static void +_config_set_list (notmuch_config_t *config, + const char *group, const char *name, + const char *list[], + size_t length, const char ***config_var ) +{ + g_key_file_set_string_list (config->key_file, group, name, list, length); + talloc_free (*config_var); + *config_var = NULL; +} + const char * notmuch_config_get_database_path (notmuch_config_t *config) { @@ -551,37 +593,6 @@ notmuch_config_set_user_primary_email (notmuch_config_t *config, config->user_primary_email = NULL; } -static const char ** -_config_get_list (notmuch_config_t *config, - const char *section, const char *key, - const char ***outlist, size_t *list_length, size_t *ret_length) -{ - assert(outlist); - - if (*outlist == NULL) { - - char **inlist = g_key_file_get_string_list (config->key_file, - section, key, list_length, NULL); - if (inlist) { - unsigned int i; - - *outlist = talloc_size (config, sizeof (char *) * (*list_length + 1)); - - for (i = 0; i < *list_length; i++) - (*outlist)[i] = talloc_strdup (*outlist, inlist[i]); - - (*outlist)[i] = NULL; - - g_strfreev (inlist); - } - } - - if (ret_length) - *ret_length = *list_length; - - return *outlist; -} - const char ** notmuch_config_get_user_other_email (notmuch_config_t *config, size_t *length) { @@ -598,17 +609,6 @@ notmuch_config_get_new_tags (notmuch_config_t *config, size_t *length) &(config->new_tags_length), length); } -static void -_config_set_list (notmuch_config_t *config, - const char *group, const char *name, - const char *list[], - size_t length, const char ***config_var ) -{ - g_key_file_set_string_list (config->key_file, group, name, list, length); - talloc_free (*config_var); - *config_var = NULL; -} - void notmuch_config_set_user_other_email (notmuch_config_t *config, const char *list[], -- 1.7.6.4 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* [PATCH 2/2] added support for user-specified directories to exclude 2012-01-26 10:11 ` [PATCH 1/2] moved _notmuch_get_list () and _notmuch_set_list () up in file Tomi Ollila @ 2012-01-26 10:11 ` Tomi Ollila 2012-01-26 13:11 ` Jani Nikula 2012-01-27 22:50 ` Austin Clements 2012-01-26 13:03 ` [PATCH 1/2] moved _notmuch_get_list () and _notmuch_set_list () up in file Jani Nikula 1 sibling, 2 replies; 58+ messages in thread From: Tomi Ollila @ 2012-01-26 10:11 UTC (permalink / raw) To: notmuch; +Cc: Tomi Ollila A new configuration key 'database.exclude' is used to determine which directories user wants not to be scanned for new mails. --- Notes (from 2011-09-13): 1) Currently the comments for newly created configuration file are not updated, so for not this is 'undocumented feature'. Should there be an empty configuration line as a placeholder ... ? 2) Whenever some already existing directory is added to the exclude list and the parent directory timestamp has not changed, notmuch new will not notice the directory has gone (as it still is there), user needs to 'touch' the parent directory before next 'notmuch new' no make notmuch notice. 2012-01-26: could notmuch track mtime of the configuration file and if that changes, ignore mail directory timestamps ? 3) count_files() function is not touched. The functionality there has fallen behind of add_files_recursive (maildir+tmp check and following symlinks). The question there should it be updated, or attempted to merge with add_files (as the comment says). count_files() is only called at the beginning when database is not yet initialised. --- notmuch-client.h | 3 +++ notmuch-config.c | 13 +++++++++++++ notmuch-new.c | 22 ++++++++++++++++++++-- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/notmuch-client.h b/notmuch-client.h index e0eb594..78460fc 100644 --- a/notmuch-client.h +++ b/notmuch-client.h @@ -219,6 +219,9 @@ void notmuch_config_set_database_path (notmuch_config_t *config, const char *database_path); +const char ** +notmuch_config_get_database_exclude (notmuch_config_t *config, + size_t *length); const char * notmuch_config_get_user_name (notmuch_config_t *config); diff --git a/notmuch-config.c b/notmuch-config.c index a124e34..e236114 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -99,6 +99,8 @@ struct _notmuch_config { GKeyFile *key_file; char *database_path; + const char **database_exclude; + size_t database_exclude_length; char *user_name; char *user_primary_email; const char **user_other_email; @@ -258,6 +260,8 @@ notmuch_config_open (void *ctx, config->key_file = g_key_file_new (); config->database_path = NULL; + config->database_exclude = NULL; + config->database_exclude_length = 0; config->user_name = NULL; config->user_primary_email = NULL; config->user_other_email = NULL; @@ -537,6 +541,15 @@ notmuch_config_set_database_path (notmuch_config_t *config, config->database_path = NULL; } +const char ** +notmuch_config_get_database_exclude (notmuch_config_t *config, + size_t *length) +{ + return _config_get_list (config, "database", "exclude", + &(config->database_exclude), + &(config->database_exclude_length), length); +} + const char * notmuch_config_get_user_name (notmuch_config_t *config) { diff --git a/notmuch-new.c b/notmuch-new.c index a569a54..d607f5b 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -39,6 +39,8 @@ typedef struct { int verbose; const char **new_tags; size_t new_tags_length; + const char **database_exclude; + size_t database_exclude_length; int total_files; int processed_files; @@ -300,6 +302,8 @@ add_files_recursive (notmuch_database_t *notmuch, is_maildir = _entries_resemble_maildir (fs_entries, num_fs_entries); for (i = 0; i < num_fs_entries; i++) { + size_t j; + if (interrupted) break; @@ -323,8 +327,6 @@ add_files_recursive (notmuch_database_t *notmuch, * Also ignore the .notmuch directory and any "tmp" directory * that appears within a maildir. */ - /* XXX: Eventually we'll want more sophistication to let the - * user specify files to be ignored. */ if (strcmp (entry->d_name, ".") == 0 || strcmp (entry->d_name, "..") == 0 || (is_maildir && strcmp (entry->d_name, "tmp") == 0) || @@ -332,6 +334,12 @@ add_files_recursive (notmuch_database_t *notmuch, { continue; } + /* Ignore user-specified directories */ + for (j = 0; j < state->database_exclude_length; j++) + if (strcmp(entry->d_name, state->database_exclude[j]) == 0) + break; + if (j < state->database_exclude_length) + continue; next = talloc_asprintf (notmuch, "%s/%s", path, entry->d_name); status = add_files_recursive (notmuch, next, state); @@ -364,11 +372,20 @@ add_files_recursive (notmuch_database_t *notmuch, /* Pass 2: Scan for new files, removed files, and removed directories. */ for (i = 0; i < num_fs_entries; i++) { + size_t j; + if (interrupted) break; entry = fs_entries[i]; + /* Ignore user-specified files & directories */ + for (j = 0; j < state->database_exclude_length; j++) + if (strcmp(entry->d_name, state->database_exclude[j]) == 0) + break; + if (j < state->database_exclude_length) + continue; + /* Check if we've walked past any names in db_files or * db_subdirs. If so, these have been deleted. */ while (notmuch_filenames_valid (db_files) && @@ -837,6 +854,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) return 1; add_files_state.new_tags = notmuch_config_get_new_tags (config, &add_files_state.new_tags_length); + add_files_state.database_exclude = notmuch_config_get_database_exclude (config, &add_files_state.database_exclude_length); add_files_state.synchronize_flags = notmuch_config_get_maildir_synchronize_flags (config); db_path = notmuch_config_get_database_path (config); -- 1.7.6.4 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: [PATCH 2/2] added support for user-specified directories to exclude 2012-01-26 10:11 ` [PATCH 2/2] added support for user-specified directories to exclude Tomi Ollila @ 2012-01-26 13:11 ` Jani Nikula 2012-01-27 10:41 ` Tomi Ollila 2012-01-27 22:50 ` Austin Clements 1 sibling, 1 reply; 58+ messages in thread From: Jani Nikula @ 2012-01-26 13:11 UTC (permalink / raw) To: Tomi Ollila, notmuch; +Cc: Tomi Ollila On Thu, 26 Jan 2012 12:11:58 +0200, Tomi Ollila <tomi.ollila@iki.fi> wrote: > A new configuration key 'database.exclude' is used to determine > which directories user wants not to be scanned for new mails. > > --- > > Notes (from 2011-09-13): > > 1) Currently the comments for newly created configuration file are not > updated, so for not this is 'undocumented feature'. Should there be an > empty configuration line as a placeholder ... ? > > 2) Whenever some already existing directory is added to the exclude list > and the parent directory timestamp has not changed, notmuch new will not > notice the directory has gone (as it still is there), user needs to 'touch' > the parent directory before next 'notmuch new' no make notmuch notice. > > 2012-01-26: could notmuch track mtime of the configuration file and if > that changes, ignore mail directory timestamps ? > > 3) count_files() function is not touched. The functionality there has fallen > behind of add_files_recursive (maildir+tmp check and following symlinks). > The question there should it be updated, or attempted to merge with > add_files (as the comment says). count_files() is only called at the beginning > when database is not yet initialised. > --- > notmuch-client.h | 3 +++ > notmuch-config.c | 13 +++++++++++++ > notmuch-new.c | 22 ++++++++++++++++++++-- > 3 files changed, 36 insertions(+), 2 deletions(-) > > diff --git a/notmuch-client.h b/notmuch-client.h > index e0eb594..78460fc 100644 > --- a/notmuch-client.h > +++ b/notmuch-client.h > @@ -219,6 +219,9 @@ void > notmuch_config_set_database_path (notmuch_config_t *config, > const char *database_path); > > +const char ** > +notmuch_config_get_database_exclude (notmuch_config_t *config, > + size_t *length); > const char * > notmuch_config_get_user_name (notmuch_config_t *config); > > diff --git a/notmuch-config.c b/notmuch-config.c > index a124e34..e236114 100644 > --- a/notmuch-config.c > +++ b/notmuch-config.c > @@ -99,6 +99,8 @@ struct _notmuch_config { > GKeyFile *key_file; > > char *database_path; > + const char **database_exclude; > + size_t database_exclude_length; > char *user_name; > char *user_primary_email; > const char **user_other_email; > @@ -258,6 +260,8 @@ notmuch_config_open (void *ctx, > config->key_file = g_key_file_new (); > > config->database_path = NULL; > + config->database_exclude = NULL; > + config->database_exclude_length = 0; > config->user_name = NULL; > config->user_primary_email = NULL; > config->user_other_email = NULL; > @@ -537,6 +541,15 @@ notmuch_config_set_database_path (notmuch_config_t *config, > config->database_path = NULL; > } > > +const char ** > +notmuch_config_get_database_exclude (notmuch_config_t *config, > + size_t *length) > +{ > + return _config_get_list (config, "database", "exclude", > + &(config->database_exclude), > + &(config->database_exclude_length), length); > +} > + > const char * > notmuch_config_get_user_name (notmuch_config_t *config) > { > diff --git a/notmuch-new.c b/notmuch-new.c > index a569a54..d607f5b 100644 > --- a/notmuch-new.c > +++ b/notmuch-new.c > @@ -39,6 +39,8 @@ typedef struct { > int verbose; > const char **new_tags; > size_t new_tags_length; > + const char **database_exclude; > + size_t database_exclude_length; > > int total_files; > int processed_files; > @@ -300,6 +302,8 @@ add_files_recursive (notmuch_database_t *notmuch, > is_maildir = _entries_resemble_maildir (fs_entries, num_fs_entries); > > for (i = 0; i < num_fs_entries; i++) { > + size_t j; > + > if (interrupted) > break; > > @@ -323,8 +327,6 @@ add_files_recursive (notmuch_database_t *notmuch, > * Also ignore the .notmuch directory and any "tmp" directory > * that appears within a maildir. > */ > - /* XXX: Eventually we'll want more sophistication to let the > - * user specify files to be ignored. */ > if (strcmp (entry->d_name, ".") == 0 || > strcmp (entry->d_name, "..") == 0 || > (is_maildir && strcmp (entry->d_name, "tmp") == 0) || > @@ -332,6 +334,12 @@ add_files_recursive (notmuch_database_t *notmuch, > { > continue; > } > + /* Ignore user-specified directories */ > + for (j = 0; j < state->database_exclude_length; j++) > + if (strcmp(entry->d_name, state->database_exclude[j]) == 0) > + break; > + if (j < state->database_exclude_length) > + continue; How about wrapping that in a function you can use here and below? if (user_wants_this_excluded (...)) continue; Please also have a look at id:"87pqecylon.fsf@nikula.org" and the patches Austin posted. "Auto ignore"? BR, Jani. > > next = talloc_asprintf (notmuch, "%s/%s", path, entry->d_name); > status = add_files_recursive (notmuch, next, state); > @@ -364,11 +372,20 @@ add_files_recursive (notmuch_database_t *notmuch, > /* Pass 2: Scan for new files, removed files, and removed directories. */ > for (i = 0; i < num_fs_entries; i++) > { > + size_t j; > + > if (interrupted) > break; > > entry = fs_entries[i]; > > + /* Ignore user-specified files & directories */ > + for (j = 0; j < state->database_exclude_length; j++) > + if (strcmp(entry->d_name, state->database_exclude[j]) == 0) > + break; > + if (j < state->database_exclude_length) > + continue; > + > /* Check if we've walked past any names in db_files or > * db_subdirs. If so, these have been deleted. */ > while (notmuch_filenames_valid (db_files) && > @@ -837,6 +854,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) > return 1; > > add_files_state.new_tags = notmuch_config_get_new_tags (config, &add_files_state.new_tags_length); > + add_files_state.database_exclude = notmuch_config_get_database_exclude (config, &add_files_state.database_exclude_length); > add_files_state.synchronize_flags = notmuch_config_get_maildir_synchronize_flags (config); > db_path = notmuch_config_get_database_path (config); > > -- > 1.7.6.4 > > _______________________________________________ > notmuch mailing list > notmuch@notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH 2/2] added support for user-specified directories to exclude 2012-01-26 13:11 ` Jani Nikula @ 2012-01-27 10:41 ` Tomi Ollila 2012-01-27 22:14 ` Austin Clements 2012-01-28 14:16 ` Fabio Zanini 0 siblings, 2 replies; 58+ messages in thread From: Tomi Ollila @ 2012-01-27 10:41 UTC (permalink / raw) To: Jani Nikula, notmuch On Thu, 26 Jan 2012 13:11:36 +0000, Jani Nikula <jani@nikula.org> wrote: > On Thu, 26 Jan 2012 12:11:58 +0200, Tomi Ollila <tomi.ollila@iki.fi> wrote: > > A new configuration key 'database.exclude' is used to determine > > which directories user wants not to be scanned for new mails. > > > > --- > > > > Notes (from 2011-09-13): > > > > 1) Currently the comments for newly created configuration file are not > > updated, so for not this is 'undocumented feature'. Should there be an > > empty configuration line as a placeholder ... ? > > > > 2) Whenever some already existing directory is added to the exclude list > > and the parent directory timestamp has not changed, notmuch new will not > > notice the directory has gone (as it still is there), user needs to 'touch' > > the parent directory before next 'notmuch new' no make notmuch notice. > > > > 2012-01-26: could notmuch track mtime of the configuration file and if > > that changes, ignore mail directory timestamps ? > > > > 3) count_files() function is not touched. The functionality there has fallen > > behind of add_files_recursive (maildir+tmp check and following symlinks). > > The question there should it be updated, or attempted to merge with > > add_files (as the comment says). count_files() is only called at the beginning > > when database is not yet initialised. > > --- [ ... ] > > + /* Ignore user-specified directories */ > > + for (j = 0; j < state->database_exclude_length; j++) > > + if (strcmp(entry->d_name, state->database_exclude[j]) == 0) > > + break; > > + if (j < state->database_exclude_length) > > + continue; > > How about wrapping that in a function you can use here and below? > > if (user_wants_this_excluded (...)) > continue; Good point.... > Please also have a look at id:"87pqecylon.fsf@nikula.org" and the > patches Austin posted. "Auto ignore"? I personally don't mind auto ignore -- I even like the system yells about those 3 files I forgot to add to ignore list every now and then (when the mtime of the directory those are located changes). This is also something different -- I can start keeping my drafts and spam directories alongside other mail directories (or folders is you want to use that term). Thanks for that id: it refers thread starting from id:"ylp7hi23mw8.fsf@tyndall.ie" ( http://notmuchmail.org/pipermail/notmuch/2010/003145.html ) and the patch there is somewhat more complete (although old rebase-wise). It's easy to combine works together, but more difficult is to choose best terminology: database.exclude vs. new.ignore (or something in between or totally different). Ideas anyone? Tomi ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH 2/2] added support for user-specified directories to exclude 2012-01-27 10:41 ` Tomi Ollila @ 2012-01-27 22:14 ` Austin Clements 2012-01-28 14:16 ` Fabio Zanini 1 sibling, 0 replies; 58+ messages in thread From: Austin Clements @ 2012-01-27 22:14 UTC (permalink / raw) To: Tomi Ollila; +Cc: notmuch Quoth Tomi Ollila on Jan 27 at 12:41 pm: > On Thu, 26 Jan 2012 13:11:36 +0000, Jani Nikula <jani@nikula.org> wrote: > > On Thu, 26 Jan 2012 12:11:58 +0200, Tomi Ollila <tomi.ollila@iki.fi> wrote: > > > A new configuration key 'database.exclude' is used to determine > > > which directories user wants not to be scanned for new mails. > > > > > > --- > > > > > > Notes (from 2011-09-13): > > > > > > 1) Currently the comments for newly created configuration file are not > > > updated, so for not this is 'undocumented feature'. Should there be an > > > empty configuration line as a placeholder ... ? > > > > > > 2) Whenever some already existing directory is added to the exclude list > > > and the parent directory timestamp has not changed, notmuch new will not > > > notice the directory has gone (as it still is there), user needs to 'touch' > > > the parent directory before next 'notmuch new' no make notmuch notice. > > > > > > 2012-01-26: could notmuch track mtime of the configuration file and if > > > that changes, ignore mail directory timestamps ? > > > > > > 3) count_files() function is not touched. The functionality there has fallen > > > behind of add_files_recursive (maildir+tmp check and following symlinks). > > > The question there should it be updated, or attempted to merge with > > > add_files (as the comment says). count_files() is only called at the beginning > > > when database is not yet initialised. > > > --- > > [ ... ] > > > > + /* Ignore user-specified directories */ > > > + for (j = 0; j < state->database_exclude_length; j++) > > > + if (strcmp(entry->d_name, state->database_exclude[j]) == 0) > > > + break; > > > + if (j < state->database_exclude_length) > > > + continue; > > > > How about wrapping that in a function you can use here and below? > > > > if (user_wants_this_excluded (...)) > > continue; > > Good point.... > > > Please also have a look at id:"87pqecylon.fsf@nikula.org" and the > > patches Austin posted. "Auto ignore"? > > I personally don't mind auto ignore -- I even like the system yells about > those 3 files I forgot to add to ignore list every now and then (when the > mtime of the directory those are located changes). This is also something > different -- I can start keeping my drafts and spam directories alongside > other mail directories (or folders is you want to use that term). The allure of auto ignore is that you don't have to do anything to use it, but it's much less powerful than explicit ignores. I think having both mechanisms would be overkill and I would use explicit ignores in preference to auto ignore. > Thanks for that id: it refers thread starting from id:"ylp7hi23mw8.fsf@tyndall.ie" > ( http://notmuchmail.org/pipermail/notmuch/2010/003145.html ) > > and the patch there is somewhat more complete (although old rebase-wise). > It's easy to combine works together, but more difficult is to choose best > terminology: database.exclude vs. new.ignore (or something in between or > totally different). Ideas anyone? I would weigh in on the side of new.ignore, or at least something under [new]. This option fits better with the existing option in [new] than it does with the existing option in [database]. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH 2/2] added support for user-specified directories to exclude 2012-01-27 10:41 ` Tomi Ollila 2012-01-27 22:14 ` Austin Clements @ 2012-01-28 14:16 ` Fabio Zanini 1 sibling, 0 replies; 58+ messages in thread From: Fabio Zanini @ 2012-01-28 14:16 UTC (permalink / raw) To: notmuch On Fri, Jan 27, 2012 at 12:41:18PM +0200, Tomi Ollila wrote: > It's easy to combine works together, but more difficult is to choose best > terminology: database.exclude vs. new.ignore (or something in between or > totally different). Ideas anyone? I would opt for including two mechanisms for ignoring dirs: - explicit mention in the config file (e.g. under new.ignore); - check for presence of a file in the dir (e.g. .notmuchignore), much like mu [1]. The second mechanism is useful in case of a large number of folders to be ignored, as one can simply copy .notmuchignore in all those folders with a for cycle; listing all of them in the config file would be cumbersome - and make the config file itself horribly bloated. Cheers, Fabio [1] http://code.google.com/p/mu0/ ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH 2/2] added support for user-specified directories to exclude 2012-01-26 10:11 ` [PATCH 2/2] added support for user-specified directories to exclude Tomi Ollila 2012-01-26 13:11 ` Jani Nikula @ 2012-01-27 22:50 ` Austin Clements 1 sibling, 0 replies; 58+ messages in thread From: Austin Clements @ 2012-01-27 22:50 UTC (permalink / raw) To: Tomi Ollila; +Cc: notmuch Quoth Tomi Ollila on Jan 26 at 12:11 pm: > A new configuration key 'database.exclude' is used to determine > which directories user wants not to be scanned for new mails. Not just directories. > --- > > Notes (from 2011-09-13): > > 1) Currently the comments for newly created configuration file are not > updated, so for not this is 'undocumented feature'. Should there be an > empty configuration line as a placeholder ... ? This is unfortunate and hard to do anything about with the current config file design. For precisely this reason, I think option documentation should be in per-option comments instead of per-section comments, but this would be a large change to the config structure. For now, it should definitely be added to the section comment so that newly generated config files get it. If you want to be fancy, you can check for the old section comment (or perhaps just its hash) and automatically upgrade it. > 2) Whenever some already existing directory is added to the exclude list > and the parent directory timestamp has not changed, notmuch new will not > notice the directory has gone (as it still is there), user needs to 'touch' > the parent directory before next 'notmuch new' no make notmuch notice. > > 2012-01-26: could notmuch track mtime of the configuration file and if > that changes, ignore mail directory timestamps ? notmuch actively descends into every subdirectory of your Maildir (it has to, since mtime changes don't propagate up), which seems like the perfect opportunity to check if an ignored directory is present in the database. This is harder for ignored files and probably not worth solving since people are probably ignoring files that aren't mail anyway (whereas I know people want to ignore directories that contain mail). > 3) count_files() function is not touched. The functionality there has fallen > behind of add_files_recursive (maildir+tmp check and following symlinks). > The question there should it be updated, or attempted to merge with > add_files (as the comment says). count_files() is only called at the beginning > when database is not yet initialised. Given that count_files is already broken, it's probably best to leave it as is for now and maybe fix it thoroughly later. I wouldn't be too worried about this though, since a new database is likely to also have no configured ignores. > --- > notmuch-client.h | 3 +++ > notmuch-config.c | 13 +++++++++++++ > notmuch-new.c | 22 ++++++++++++++++++++-- > 3 files changed, 36 insertions(+), 2 deletions(-) > > diff --git a/notmuch-client.h b/notmuch-client.h > index e0eb594..78460fc 100644 > --- a/notmuch-client.h > +++ b/notmuch-client.h > @@ -219,6 +219,9 @@ void > notmuch_config_set_database_path (notmuch_config_t *config, > const char *database_path); > > +const char ** > +notmuch_config_get_database_exclude (notmuch_config_t *config, > + size_t *length); As I mentioned in another email, I would prefer to see this in the 'new' section (though I could probably be persuaded otherwise). Also, I think "ignore" would be more typical terminology (think .gitignore, etc). Also, every other getter has a corresponding setter. > const char * > notmuch_config_get_user_name (notmuch_config_t *config); > > diff --git a/notmuch-config.c b/notmuch-config.c > index a124e34..e236114 100644 > --- a/notmuch-config.c > +++ b/notmuch-config.c > @@ -99,6 +99,8 @@ struct _notmuch_config { > GKeyFile *key_file; > > char *database_path; > + const char **database_exclude; > + size_t database_exclude_length; > char *user_name; > char *user_primary_email; > const char **user_other_email; > @@ -258,6 +260,8 @@ notmuch_config_open (void *ctx, > config->key_file = g_key_file_new (); > > config->database_path = NULL; > + config->database_exclude = NULL; > + config->database_exclude_length = 0; > config->user_name = NULL; > config->user_primary_email = NULL; > config->user_other_email = NULL; > @@ -537,6 +541,15 @@ notmuch_config_set_database_path (notmuch_config_t *config, > config->database_path = NULL; > } > > +const char ** > +notmuch_config_get_database_exclude (notmuch_config_t *config, > + size_t *length) > +{ > + return _config_get_list (config, "database", "exclude", > + &(config->database_exclude), > + &(config->database_exclude_length), length); > +} > + All of the other options are fetched by notmuch_config_open and set if they don't exist. This has the effect that they will get added to the configuration file if it is written out, which won't happen to this option. > const char * > notmuch_config_get_user_name (notmuch_config_t *config) > { > diff --git a/notmuch-new.c b/notmuch-new.c > index a569a54..d607f5b 100644 > --- a/notmuch-new.c > +++ b/notmuch-new.c > @@ -39,6 +39,8 @@ typedef struct { > int verbose; > const char **new_tags; > size_t new_tags_length; > + const char **database_exclude; > + size_t database_exclude_length; > > int total_files; > int processed_files; > @@ -300,6 +302,8 @@ add_files_recursive (notmuch_database_t *notmuch, > is_maildir = _entries_resemble_maildir (fs_entries, num_fs_entries); > > for (i = 0; i < num_fs_entries; i++) { > + size_t j; > + > if (interrupted) > break; > > @@ -323,8 +327,6 @@ add_files_recursive (notmuch_database_t *notmuch, > * Also ignore the .notmuch directory and any "tmp" directory > * that appears within a maildir. > */ > - /* XXX: Eventually we'll want more sophistication to let the > - * user specify files to be ignored. */ > if (strcmp (entry->d_name, ".") == 0 || > strcmp (entry->d_name, "..") == 0 || > (is_maildir && strcmp (entry->d_name, "tmp") == 0) || > @@ -332,6 +334,12 @@ add_files_recursive (notmuch_database_t *notmuch, > { > continue; > } > + /* Ignore user-specified directories */ > + for (j = 0; j < state->database_exclude_length; j++) > + if (strcmp(entry->d_name, state->database_exclude[j]) == 0) > + break; > + if (j < state->database_exclude_length) > + continue; As Jani said, move this into its own function (which would simplify the control flow, too). > > next = talloc_asprintf (notmuch, "%s/%s", path, entry->d_name); > status = add_files_recursive (notmuch, next, state); > @@ -364,11 +372,20 @@ add_files_recursive (notmuch_database_t *notmuch, > /* Pass 2: Scan for new files, removed files, and removed directories. */ > for (i = 0; i < num_fs_entries; i++) > { > + size_t j; > + > if (interrupted) > break; > > entry = fs_entries[i]; > > + /* Ignore user-specified files & directories */ > + for (j = 0; j < state->database_exclude_length; j++) > + if (strcmp(entry->d_name, state->database_exclude[j]) == 0) > + break; > + if (j < state->database_exclude_length) > + continue; > + > /* Check if we've walked past any names in db_files or > * db_subdirs. If so, these have been deleted. */ > while (notmuch_filenames_valid (db_files) && > @@ -837,6 +854,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) > return 1; > > add_files_state.new_tags = notmuch_config_get_new_tags (config, &add_files_state.new_tags_length); > + add_files_state.database_exclude = notmuch_config_get_database_exclude (config, &add_files_state.database_exclude_length); > add_files_state.synchronize_flags = notmuch_config_get_maildir_synchronize_flags (config); > db_path = notmuch_config_get_database_path (config); > ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH 1/2] moved _notmuch_get_list () and _notmuch_set_list () up in file 2012-01-26 10:11 ` [PATCH 1/2] moved _notmuch_get_list () and _notmuch_set_list () up in file Tomi Ollila 2012-01-26 10:11 ` [PATCH 2/2] added support for user-specified directories to exclude Tomi Ollila @ 2012-01-26 13:03 ` Jani Nikula 2012-01-27 10:42 ` Tomi Ollila 2012-01-27 10:59 ` [PATCH] moved _notmuch_(get|set)_list " Tomi Ollila 1 sibling, 2 replies; 58+ messages in thread From: Jani Nikula @ 2012-01-26 13:03 UTC (permalink / raw) To: Tomi Ollila, notmuch; +Cc: Tomi Ollila On Thu, 26 Jan 2012 12:11:57 +0200, Tomi Ollila <tomi.ollila@iki.fi> wrote: > Moved _notmuch_get_list () and _notmuch_set_list () to a location > in notmuch-config.c so that new functions that will be located > before the old location of those functions can also use these. Parse error. ;) You mean something along the lines of: "Move _notmuch_get_list () and _notmuch_set_list () earlier in the file to avoid forward declarations in further work. No functional changes." I'm sure native speakers can bikeshed that further. ;) BR, Jani. > --- > > This patch is independent of the next one (just required by it) > and can (should) be pushed early. > > notmuch-config.c | 84 +++++++++++++++++++++++++++--------------------------- > 1 files changed, 42 insertions(+), 42 deletions(-) > > diff --git a/notmuch-config.c b/notmuch-config.c > index 0ded6d7..a124e34 100644 > --- a/notmuch-config.c > +++ b/notmuch-config.c > @@ -467,6 +467,48 @@ notmuch_config_save (notmuch_config_t *config) > return 0; > } > > +static const char ** > +_config_get_list (notmuch_config_t *config, > + const char *section, const char *key, > + const char ***outlist, size_t *list_length, size_t *ret_length) > +{ > + assert(outlist); > + > + if (*outlist == NULL) { > + > + char **inlist = g_key_file_get_string_list (config->key_file, > + section, key, list_length, NULL); > + if (inlist) { > + unsigned int i; > + > + *outlist = talloc_size (config, sizeof (char *) * (*list_length + 1)); > + > + for (i = 0; i < *list_length; i++) > + (*outlist)[i] = talloc_strdup (*outlist, inlist[i]); > + > + (*outlist)[i] = NULL; > + > + g_strfreev (inlist); > + } > + } > + > + if (ret_length) > + *ret_length = *list_length; > + > + return *outlist; > +} > + > +static void > +_config_set_list (notmuch_config_t *config, > + const char *group, const char *name, > + const char *list[], > + size_t length, const char ***config_var ) > +{ > + g_key_file_set_string_list (config->key_file, group, name, list, length); > + talloc_free (*config_var); > + *config_var = NULL; > +} > + > const char * > notmuch_config_get_database_path (notmuch_config_t *config) > { > @@ -551,37 +593,6 @@ notmuch_config_set_user_primary_email (notmuch_config_t *config, > config->user_primary_email = NULL; > } > > -static const char ** > -_config_get_list (notmuch_config_t *config, > - const char *section, const char *key, > - const char ***outlist, size_t *list_length, size_t *ret_length) > -{ > - assert(outlist); > - > - if (*outlist == NULL) { > - > - char **inlist = g_key_file_get_string_list (config->key_file, > - section, key, list_length, NULL); > - if (inlist) { > - unsigned int i; > - > - *outlist = talloc_size (config, sizeof (char *) * (*list_length + 1)); > - > - for (i = 0; i < *list_length; i++) > - (*outlist)[i] = talloc_strdup (*outlist, inlist[i]); > - > - (*outlist)[i] = NULL; > - > - g_strfreev (inlist); > - } > - } > - > - if (ret_length) > - *ret_length = *list_length; > - > - return *outlist; > -} > - > const char ** > notmuch_config_get_user_other_email (notmuch_config_t *config, size_t *length) > { > @@ -598,17 +609,6 @@ notmuch_config_get_new_tags (notmuch_config_t *config, size_t *length) > &(config->new_tags_length), length); > } > > -static void > -_config_set_list (notmuch_config_t *config, > - const char *group, const char *name, > - const char *list[], > - size_t length, const char ***config_var ) > -{ > - g_key_file_set_string_list (config->key_file, group, name, list, length); > - talloc_free (*config_var); > - *config_var = NULL; > -} > - > void > notmuch_config_set_user_other_email (notmuch_config_t *config, > const char *list[], > -- > 1.7.6.4 > > _______________________________________________ > notmuch mailing list > notmuch@notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH 1/2] moved _notmuch_get_list () and _notmuch_set_list () up in file 2012-01-26 13:03 ` [PATCH 1/2] moved _notmuch_get_list () and _notmuch_set_list () up in file Jani Nikula @ 2012-01-27 10:42 ` Tomi Ollila 2012-01-27 18:18 ` Ethan Glasser-Camp 2012-01-27 10:59 ` [PATCH] moved _notmuch_(get|set)_list " Tomi Ollila 1 sibling, 1 reply; 58+ messages in thread From: Tomi Ollila @ 2012-01-27 10:42 UTC (permalink / raw) To: Jani Nikula, notmuch On Thu, 26 Jan 2012 13:03:46 +0000, Jani Nikula <jani@nikula.org> wrote: > On Thu, 26 Jan 2012 12:11:57 +0200, Tomi Ollila <tomi.ollila@iki.fi> wrote: > > Moved _notmuch_get_list () and _notmuch_set_list () to a location > > in notmuch-config.c so that new functions that will be located > > before the old location of those functions can also use these. > > Parse error. ;) > > You mean something along the lines of: "Move _notmuch_get_list () and > _notmuch_set_list () earlier in the file to avoid forward declarations > in further work. No functional changes." > > I'm sure native speakers can bikeshed that further. ;) Ok, they haven't. I'n resubmit this alone with better commit message -- I look the other after I have better time. > > BR, > Jani. > Tomi ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH 1/2] moved _notmuch_get_list () and _notmuch_set_list () up in file 2012-01-27 10:42 ` Tomi Ollila @ 2012-01-27 18:18 ` Ethan Glasser-Camp 2012-01-30 10:31 ` [PATCH] moved _config_(get|set)_list () functions earlyer in the file Tomi Ollila 0 siblings, 1 reply; 58+ messages in thread From: Ethan Glasser-Camp @ 2012-01-27 18:18 UTC (permalink / raw) To: Tomi Ollila; +Cc: notmuch On 01/27/2012 05:42 AM, Tomi Ollila wrote: > On Thu, 26 Jan 2012 13:03:46 +0000, Jani Nikula<jani@nikula.org> wrote: >> On Thu, 26 Jan 2012 12:11:57 +0200, Tomi Ollila<tomi.ollila@iki.fi> wrote: >>> Moved _notmuch_get_list () and _notmuch_set_list () to a location >>> in notmuch-config.c so that new functions that will be located >>> before the old location of those functions can also use these. >> Parse error. ;) >> >> You mean something along the lines of: "Move _notmuch_get_list () and >> _notmuch_set_list () earlier in the file to avoid forward declarations >> in further work. No functional changes." >> >> I'm sure native speakers can bikeshed that further. ;) > Ok, they haven't. I'n resubmit this alone with better commit > message -- I look the other after I have better time. As a native speaker, your new version is acceptable but I found "in further work" a little odd. (Depending on what you meant, I'd say "in upcoming patches".) The thing I found most confusing about the comment is that the functions aren't called _notmuch_get_list or _notmuch_set_list (instead they are _config_get_list and _config_set_list.) Ethan ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH] moved _config_(get|set)_list () functions earlyer in the file 2012-01-27 18:18 ` Ethan Glasser-Camp @ 2012-01-30 10:31 ` Tomi Ollila 2012-01-30 15:06 ` Austin Clements 2012-01-31 3:28 ` David Bremner 0 siblings, 2 replies; 58+ messages in thread From: Tomi Ollila @ 2012-01-30 10:31 UTC (permalink / raw) To: notmuch; +Cc: Tomi Ollila Moved static functions _config_get_list () and _config_set_list () closer to the beginning of file so that their definition is known (without adding forward declarations) in upcoming changes. --- This addresses Ethan's comments. Thanks. s/_notmuch_/_config_/ and changed 'in further work' to 'in upcoming changes' -- 'changes' being more generic that 'patches'. notmuch-config.c | 84 +++++++++++++++++++++++++++--------------------------- 1 files changed, 42 insertions(+), 42 deletions(-) diff --git a/notmuch-config.c b/notmuch-config.c index 0ded6d7..a124e34 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -467,6 +467,48 @@ notmuch_config_save (notmuch_config_t *config) return 0; } +static const char ** +_config_get_list (notmuch_config_t *config, + const char *section, const char *key, + const char ***outlist, size_t *list_length, size_t *ret_length) +{ + assert(outlist); + + if (*outlist == NULL) { + + char **inlist = g_key_file_get_string_list (config->key_file, + section, key, list_length, NULL); + if (inlist) { + unsigned int i; + + *outlist = talloc_size (config, sizeof (char *) * (*list_length + 1)); + + for (i = 0; i < *list_length; i++) + (*outlist)[i] = talloc_strdup (*outlist, inlist[i]); + + (*outlist)[i] = NULL; + + g_strfreev (inlist); + } + } + + if (ret_length) + *ret_length = *list_length; + + return *outlist; +} + +static void +_config_set_list (notmuch_config_t *config, + const char *group, const char *name, + const char *list[], + size_t length, const char ***config_var ) +{ + g_key_file_set_string_list (config->key_file, group, name, list, length); + talloc_free (*config_var); + *config_var = NULL; +} + const char * notmuch_config_get_database_path (notmuch_config_t *config) { @@ -551,37 +593,6 @@ notmuch_config_set_user_primary_email (notmuch_config_t *config, config->user_primary_email = NULL; } -static const char ** -_config_get_list (notmuch_config_t *config, - const char *section, const char *key, - const char ***outlist, size_t *list_length, size_t *ret_length) -{ - assert(outlist); - - if (*outlist == NULL) { - - char **inlist = g_key_file_get_string_list (config->key_file, - section, key, list_length, NULL); - if (inlist) { - unsigned int i; - - *outlist = talloc_size (config, sizeof (char *) * (*list_length + 1)); - - for (i = 0; i < *list_length; i++) - (*outlist)[i] = talloc_strdup (*outlist, inlist[i]); - - (*outlist)[i] = NULL; - - g_strfreev (inlist); - } - } - - if (ret_length) - *ret_length = *list_length; - - return *outlist; -} - const char ** notmuch_config_get_user_other_email (notmuch_config_t *config, size_t *length) { @@ -598,17 +609,6 @@ notmuch_config_get_new_tags (notmuch_config_t *config, size_t *length) &(config->new_tags_length), length); } -static void -_config_set_list (notmuch_config_t *config, - const char *group, const char *name, - const char *list[], - size_t length, const char ***config_var ) -{ - g_key_file_set_string_list (config->key_file, group, name, list, length); - talloc_free (*config_var); - *config_var = NULL; -} - void notmuch_config_set_user_other_email (notmuch_config_t *config, const char *list[], -- 1.7.8.2 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: [PATCH] moved _config_(get|set)_list () functions earlyer in the file 2012-01-30 10:31 ` [PATCH] moved _config_(get|set)_list () functions earlyer in the file Tomi Ollila @ 2012-01-30 15:06 ` Austin Clements 2012-01-31 3:28 ` David Bremner 1 sibling, 0 replies; 58+ messages in thread From: Austin Clements @ 2012-01-30 15:06 UTC (permalink / raw) To: Tomi Ollila; +Cc: notmuch s/earlyer/earlier/, but unless someone feels strongly about that, I don't think we need another version of this trivial patch. Quoth Tomi Ollila on Jan 30 at 12:31 pm: > Moved static functions _config_get_list () and _config_set_list () > closer to the beginning of file so that their definition is known > (without adding forward declarations) in upcoming changes. > --- > > This addresses Ethan's comments. Thanks. > > s/_notmuch_/_config_/ and changed 'in further work' to 'in upcoming > changes' -- 'changes' being more generic that 'patches'. > notmuch-config.c | 84 +++++++++++++++++++++++++++--------------------------- > 1 files changed, 42 insertions(+), 42 deletions(-) > > diff --git a/notmuch-config.c b/notmuch-config.c > index 0ded6d7..a124e34 100644 > --- a/notmuch-config.c > +++ b/notmuch-config.c > @@ -467,6 +467,48 @@ notmuch_config_save (notmuch_config_t *config) > return 0; > } > > +static const char ** > +_config_get_list (notmuch_config_t *config, > + const char *section, const char *key, > + const char ***outlist, size_t *list_length, size_t *ret_length) > +{ > + assert(outlist); > + > + if (*outlist == NULL) { > + > + char **inlist = g_key_file_get_string_list (config->key_file, > + section, key, list_length, NULL); > + if (inlist) { > + unsigned int i; > + > + *outlist = talloc_size (config, sizeof (char *) * (*list_length + 1)); > + > + for (i = 0; i < *list_length; i++) > + (*outlist)[i] = talloc_strdup (*outlist, inlist[i]); > + > + (*outlist)[i] = NULL; > + > + g_strfreev (inlist); > + } > + } > + > + if (ret_length) > + *ret_length = *list_length; > + > + return *outlist; > +} > + > +static void > +_config_set_list (notmuch_config_t *config, > + const char *group, const char *name, > + const char *list[], > + size_t length, const char ***config_var ) > +{ > + g_key_file_set_string_list (config->key_file, group, name, list, length); > + talloc_free (*config_var); > + *config_var = NULL; > +} > + > const char * > notmuch_config_get_database_path (notmuch_config_t *config) > { > @@ -551,37 +593,6 @@ notmuch_config_set_user_primary_email (notmuch_config_t *config, > config->user_primary_email = NULL; > } > > -static const char ** > -_config_get_list (notmuch_config_t *config, > - const char *section, const char *key, > - const char ***outlist, size_t *list_length, size_t *ret_length) > -{ > - assert(outlist); > - > - if (*outlist == NULL) { > - > - char **inlist = g_key_file_get_string_list (config->key_file, > - section, key, list_length, NULL); > - if (inlist) { > - unsigned int i; > - > - *outlist = talloc_size (config, sizeof (char *) * (*list_length + 1)); > - > - for (i = 0; i < *list_length; i++) > - (*outlist)[i] = talloc_strdup (*outlist, inlist[i]); > - > - (*outlist)[i] = NULL; > - > - g_strfreev (inlist); > - } > - } > - > - if (ret_length) > - *ret_length = *list_length; > - > - return *outlist; > -} > - > const char ** > notmuch_config_get_user_other_email (notmuch_config_t *config, size_t *length) > { > @@ -598,17 +609,6 @@ notmuch_config_get_new_tags (notmuch_config_t *config, size_t *length) > &(config->new_tags_length), length); > } > > -static void > -_config_set_list (notmuch_config_t *config, > - const char *group, const char *name, > - const char *list[], > - size_t length, const char ***config_var ) > -{ > - g_key_file_set_string_list (config->key_file, group, name, list, length); > - talloc_free (*config_var); > - *config_var = NULL; > -} > - > void > notmuch_config_set_user_other_email (notmuch_config_t *config, > const char *list[], ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH] moved _config_(get|set)_list () functions earlyer in the file 2012-01-30 10:31 ` [PATCH] moved _config_(get|set)_list () functions earlyer in the file Tomi Ollila 2012-01-30 15:06 ` Austin Clements @ 2012-01-31 3:28 ` David Bremner 1 sibling, 0 replies; 58+ messages in thread From: David Bremner @ 2012-01-31 3:28 UTC (permalink / raw) To: Tomi Ollila, notmuch; +Cc: Tomi Ollila On Mon, 30 Jan 2012 12:31:25 +0200, Tomi Ollila <tomi.ollila@iki.fi> wrote: > Moved static functions _config_get_list () and _config_set_list () > closer to the beginning of file so that their definition is known > (without adding forward declarations) in upcoming changes. > --- pushed, d ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH] moved _notmuch_(get|set)_list () functions earlyer in the file 2012-01-26 13:03 ` [PATCH 1/2] moved _notmuch_get_list () and _notmuch_set_list () up in file Jani Nikula 2012-01-27 10:42 ` Tomi Ollila @ 2012-01-27 10:59 ` Tomi Ollila 2012-01-27 22:15 ` Austin Clements 1 sibling, 1 reply; 58+ messages in thread From: Tomi Ollila @ 2012-01-27 10:59 UTC (permalink / raw) To: notmuch; +Cc: Tomi Ollila Moved static functions _notmuch_get_list () and _notmuch_set_list () closer to the beginning of file so that their definition is known (without adding forward declarations) in further work. No functional changes. --- notmuch-config.c | 84 +++++++++++++++++++++++++++--------------------------- 1 files changed, 42 insertions(+), 42 deletions(-) diff --git a/notmuch-config.c b/notmuch-config.c index 0ded6d7..a124e34 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -467,6 +467,48 @@ notmuch_config_save (notmuch_config_t *config) return 0; } +static const char ** +_config_get_list (notmuch_config_t *config, + const char *section, const char *key, + const char ***outlist, size_t *list_length, size_t *ret_length) +{ + assert(outlist); + + if (*outlist == NULL) { + + char **inlist = g_key_file_get_string_list (config->key_file, + section, key, list_length, NULL); + if (inlist) { + unsigned int i; + + *outlist = talloc_size (config, sizeof (char *) * (*list_length + 1)); + + for (i = 0; i < *list_length; i++) + (*outlist)[i] = talloc_strdup (*outlist, inlist[i]); + + (*outlist)[i] = NULL; + + g_strfreev (inlist); + } + } + + if (ret_length) + *ret_length = *list_length; + + return *outlist; +} + +static void +_config_set_list (notmuch_config_t *config, + const char *group, const char *name, + const char *list[], + size_t length, const char ***config_var ) +{ + g_key_file_set_string_list (config->key_file, group, name, list, length); + talloc_free (*config_var); + *config_var = NULL; +} + const char * notmuch_config_get_database_path (notmuch_config_t *config) { @@ -551,37 +593,6 @@ notmuch_config_set_user_primary_email (notmuch_config_t *config, config->user_primary_email = NULL; } -static const char ** -_config_get_list (notmuch_config_t *config, - const char *section, const char *key, - const char ***outlist, size_t *list_length, size_t *ret_length) -{ - assert(outlist); - - if (*outlist == NULL) { - - char **inlist = g_key_file_get_string_list (config->key_file, - section, key, list_length, NULL); - if (inlist) { - unsigned int i; - - *outlist = talloc_size (config, sizeof (char *) * (*list_length + 1)); - - for (i = 0; i < *list_length; i++) - (*outlist)[i] = talloc_strdup (*outlist, inlist[i]); - - (*outlist)[i] = NULL; - - g_strfreev (inlist); - } - } - - if (ret_length) - *ret_length = *list_length; - - return *outlist; -} - const char ** notmuch_config_get_user_other_email (notmuch_config_t *config, size_t *length) { @@ -598,17 +609,6 @@ notmuch_config_get_new_tags (notmuch_config_t *config, size_t *length) &(config->new_tags_length), length); } -static void -_config_set_list (notmuch_config_t *config, - const char *group, const char *name, - const char *list[], - size_t length, const char ***config_var ) -{ - g_key_file_set_string_list (config->key_file, group, name, list, length); - talloc_free (*config_var); - *config_var = NULL; -} - void notmuch_config_set_user_other_email (notmuch_config_t *config, const char *list[], -- 1.7.8.2 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: [PATCH] moved _notmuch_(get|set)_list () functions earlyer in the file 2012-01-27 10:59 ` [PATCH] moved _notmuch_(get|set)_list " Tomi Ollila @ 2012-01-27 22:15 ` Austin Clements 0 siblings, 0 replies; 58+ messages in thread From: Austin Clements @ 2012-01-27 22:15 UTC (permalink / raw) To: Tomi Ollila; +Cc: notmuch Quoth Tomi Ollila on Jan 27 at 12:59 pm: > Moved static functions _notmuch_get_list () and _notmuch_set_list () > closer to the beginning of file so that their definition is known > (without adding forward declarations) in further work. > > No functional changes. This patch LGTM. This is where these functions should live regardless. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH 0/3] Configuration file option to exclude files/directories 2011-12-08 9:05 ` Tomi Ollila 2012-01-25 0:46 ` Pieter Praet @ 2012-01-25 6:28 ` David Edmondson 2012-02-01 14:12 ` [PATCH] test: add tests wrt ignoring user-specified files and directories Pieter Praet 1 sibling, 1 reply; 58+ messages in thread From: David Edmondson @ 2012-01-25 6:28 UTC (permalink / raw) To: Tomi Ollila, David Bremner, notmuch [-- Attachment #1: Type: text/plain, Size: 1220 bytes --] On Thu, 08 Dec 2011 11:05:50 +0200, Tomi Ollila <tomi.ollila@iki.fi> wrote: > On Wed, 07 Dec 2011 19:51:32 -0400, David Bremner <david@tethera.net> wrote: > > On Wed, 14 Sep 2011 00:32:01 +0300, tomi.ollila@iki.fi wrote: > > > This patch set adds a configuration option 'database.exclude'; a list of > > > files/directories to be excluded when doing 'notmuch new' operation. > > > > Hi All; > > > > I could see idea of excluding spam and trash folders from indexing being > > useful, but this has been sitting in the list for a few months without > > comment. Does that mean no-one but Tomi thinks the functionality is > > interesting? Or it just slipped by? > > Well, basically due to my comments in > id:"1315949524-4948-1-git-send-email-tomi.ollila@iki.fi" (and so far little > interest to this patch series) I have 'drafts' and 'spam' directories > elsewhere. > > If there is renewed interests with real use cases I'm interested to make > this work more complete (now that there is change to get patches in ;) > -- and then move my drafts and spam under database.path too. I'd be interested in these changes (I'd like to ignore .git). It would help if a test case or two was include. [-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --] ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH] test: add tests wrt ignoring user-specified files and directories 2012-01-25 6:28 ` [PATCH 0/3] Configuration file option to exclude files/directories David Edmondson @ 2012-02-01 14:12 ` Pieter Praet 2012-02-03 12:14 ` Tomi Ollila 2012-02-03 22:44 ` Austin Clements 0 siblings, 2 replies; 58+ messages in thread From: Pieter Praet @ 2012-02-01 14:12 UTC (permalink / raw) To: David Edmondson, Tomi Ollila, David Bremner; +Cc: Notmuch Mail Files and directories which are specified in 'new.ignore' in the config file shouldn't be indexed nor reported by `notmuch new'. --- test/new | 23 +++++++++++++++++++++++ 1 files changed, 23 insertions(+), 0 deletions(-) diff --git a/test/new b/test/new index 49f390d..740ba05 100755 --- a/test/new +++ b/test/new @@ -153,4 +153,27 @@ rm -rf "${MAIL_DIR}"/two output=$(NOTMUCH_NEW) test_expect_equal "$output" "No new mail. Removed 3 messages." +test_begin_subtest "Skip and report non-mail files" +generate_message +mkdir -p "${MAIL_DIR}"/.git && touch "${MAIL_DIR}"/.git/config +touch "${MAIL_DIR}"/ignored_file +touch "${MAIL_DIR}"/.ignored_hidden_file +output=$(NOTMUCH_NEW 2>&1) +test_expect_equal "$output" \ +"Note: Ignoring non-mail file: ${MAIL_DIR}/.git/config +Note: Ignoring non-mail file: ${MAIL_DIR}/.ignored_hidden_file +Note: Ignoring non-mail file: ${MAIL_DIR}/ignored_file +Added 1 new message to the database." + +test_begin_subtest "Ignore files and directories specified in new.ignore" +test_subtest_known_broken +generate_message +notmuch config set new.ignore .git ignored_file .ignored_hidden_file +mkdir -p "${MAIL_DIR}"/.git && touch "${MAIL_DIR}"/.git/config +touch "${MAIL_DIR}"/ignored_file +touch "${MAIL_DIR}"/.ignored_hidden_file +output=$(NOTMUCH_NEW 2>&1) +test_expect_equal "$output" "Added 1 new message to the database." + + test_done -- 1.7.8.1 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: [PATCH] test: add tests wrt ignoring user-specified files and directories 2012-02-01 14:12 ` [PATCH] test: add tests wrt ignoring user-specified files and directories Pieter Praet @ 2012-02-03 12:14 ` Tomi Ollila 2012-02-03 22:39 ` Austin Clements 2012-02-03 22:44 ` Austin Clements 1 sibling, 1 reply; 58+ messages in thread From: Tomi Ollila @ 2012-02-03 12:14 UTC (permalink / raw) To: Pieter Praet, David Edmondson, David Bremner; +Cc: Notmuch Mail On Wed, 1 Feb 2012 15:12:53 +0100, Pieter Praet <pieter@praet.org> wrote: > Files and directories which are specified in 'new.ignore' in the > config file shouldn't be indexed nor reported by `notmuch new'. > > --- +1 tested file order with: $ touch ~/mail/mails/a $ touch ~/mail/mails/d $ touch ~/mail/mails/o $ touch ~/mail/mails/p $ touch ~/mail/mails/g $ touch ~/mail/mails/z $ touch ~/mail/mails/u $ touch ~/mail/mails/l $ notmuch new Note: Ignoring non-mail file: /home/too/mail/mails/a Note: Ignoring non-mail file: /home/too/mail/mails/d Note: Ignoring non-mail file: /home/too/mail/mails/g Note: Ignoring non-mail file: /home/too/mail/mails/l Note: Ignoring non-mail file: /home/too/mail/mails/o Note: Ignoring non-mail file: /home/too/mail/mails/p Note: Ignoring non-mail file: /home/too/mail/mails/u Note: Ignoring non-mail file: /home/too/mail/mails/z So we can be pretty confident that files are printed in ASCII order. Tomi ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH] test: add tests wrt ignoring user-specified files and directories 2012-02-03 12:14 ` Tomi Ollila @ 2012-02-03 22:39 ` Austin Clements 0 siblings, 0 replies; 58+ messages in thread From: Austin Clements @ 2012-02-03 22:39 UTC (permalink / raw) To: Tomi Ollila, Pieter Praet, David Edmondson, David Bremner; +Cc: Notmuch Mail On Fri, 03 Feb 2012 14:14:21 +0200, Tomi Ollila <tomi.ollila@iki.fi> wrote: > On Wed, 1 Feb 2012 15:12:53 +0100, Pieter Praet <pieter@praet.org> wrote: > > Files and directories which are specified in 'new.ignore' in the > > config file shouldn't be indexed nor reported by `notmuch new'. > > > > --- > > +1 > > tested file order with: > > $ touch ~/mail/mails/a > $ touch ~/mail/mails/d > $ touch ~/mail/mails/o > $ touch ~/mail/mails/p > $ touch ~/mail/mails/g > $ touch ~/mail/mails/z > $ touch ~/mail/mails/u > $ touch ~/mail/mails/l > > $ notmuch new > Note: Ignoring non-mail file: /home/too/mail/mails/a > Note: Ignoring non-mail file: /home/too/mail/mails/d > Note: Ignoring non-mail file: /home/too/mail/mails/g > Note: Ignoring non-mail file: /home/too/mail/mails/l > Note: Ignoring non-mail file: /home/too/mail/mails/o > Note: Ignoring non-mail file: /home/too/mail/mails/p > Note: Ignoring non-mail file: /home/too/mail/mails/u > Note: Ignoring non-mail file: /home/too/mail/mails/z > > So we can be pretty confident that files are printed > in ASCII order. This is true if the containing directory has been scanned by notmuch before (which is sufficiently true in this patch). If the containing directory is new, they're in inode order (so no guarantees). ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH] test: add tests wrt ignoring user-specified files and directories 2012-02-01 14:12 ` [PATCH] test: add tests wrt ignoring user-specified files and directories Pieter Praet 2012-02-03 12:14 ` Tomi Ollila @ 2012-02-03 22:44 ` Austin Clements 2012-02-19 20:43 ` Pieter Praet 1 sibling, 1 reply; 58+ messages in thread From: Austin Clements @ 2012-02-03 22:44 UTC (permalink / raw) To: Pieter Praet, David Edmondson, Tomi Ollila, David Bremner; +Cc: Notmuch Mail On Wed, 1 Feb 2012 15:12:53 +0100, Pieter Praet <pieter@praet.org> wrote: > Files and directories which are specified in 'new.ignore' in the > config file shouldn't be indexed nor reported by `notmuch new'. > > --- > test/new | 23 +++++++++++++++++++++++ > 1 files changed, 23 insertions(+), 0 deletions(-) > > diff --git a/test/new b/test/new > index 49f390d..740ba05 100755 > --- a/test/new > +++ b/test/new > @@ -153,4 +153,27 @@ rm -rf "${MAIL_DIR}"/two > output=$(NOTMUCH_NEW) > test_expect_equal "$output" "No new mail. Removed 3 messages." > > +test_begin_subtest "Skip and report non-mail files" > +generate_message > +mkdir -p "${MAIL_DIR}"/.git && touch "${MAIL_DIR}"/.git/config > +touch "${MAIL_DIR}"/ignored_file > +touch "${MAIL_DIR}"/.ignored_hidden_file > +output=$(NOTMUCH_NEW 2>&1) > +test_expect_equal "$output" \ > +"Note: Ignoring non-mail file: ${MAIL_DIR}/.git/config > +Note: Ignoring non-mail file: ${MAIL_DIR}/.ignored_hidden_file > +Note: Ignoring non-mail file: ${MAIL_DIR}/ignored_file > +Added 1 new message to the database." > + > +test_begin_subtest "Ignore files and directories specified in new.ignore" > +test_subtest_known_broken > +generate_message > +notmuch config set new.ignore .git ignored_file .ignored_hidden_file > +mkdir -p "${MAIL_DIR}"/.git && touch "${MAIL_DIR}"/.git/config This doesn't change .git's mtime, so notmuch new may not scan it (*may* not because it's possible/likely notmuch refused to record the mtime in the above test on account of lack of granularity). Probably you should just touch "${MAIL_DIR}"/.git. Or maybe touch a new file under it. > +touch "${MAIL_DIR}"/ignored_file > +touch "${MAIL_DIR}"/.ignored_hidden_file These aren't necessary since these files already exist and they won't touch the directory's mtime (though the generate_message will). > +output=$(NOTMUCH_NEW 2>&1) > +test_expect_equal "$output" "Added 1 new message to the database." > + > + > test_done > -- > 1.7.8.1 > > _______________________________________________ > notmuch mailing list > notmuch@notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch > ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH] test: add tests wrt ignoring user-specified files and directories 2012-02-03 22:44 ` Austin Clements @ 2012-02-19 20:43 ` Pieter Praet 0 siblings, 0 replies; 58+ messages in thread From: Pieter Praet @ 2012-02-19 20:43 UTC (permalink / raw) To: Austin Clements, David Edmondson, Tomi Ollila, David Bremner; +Cc: Notmuch Mail On Fri, 03 Feb 2012 17:44:55 -0500, Austin Clements <amdragon@MIT.EDU> wrote: > On Wed, 1 Feb 2012 15:12:53 +0100, Pieter Praet <pieter@praet.org> wrote: > > Files and directories which are specified in 'new.ignore' in the > > config file shouldn't be indexed nor reported by `notmuch new'. > > > > --- > > test/new | 23 +++++++++++++++++++++++ > > 1 files changed, 23 insertions(+), 0 deletions(-) > > > > diff --git a/test/new b/test/new > > index 49f390d..740ba05 100755 > > --- a/test/new > > +++ b/test/new > > @@ -153,4 +153,27 @@ rm -rf "${MAIL_DIR}"/two > > output=$(NOTMUCH_NEW) > > test_expect_equal "$output" "No new mail. Removed 3 messages." > > > > +test_begin_subtest "Skip and report non-mail files" > > +generate_message > > +mkdir -p "${MAIL_DIR}"/.git && touch "${MAIL_DIR}"/.git/config > > +touch "${MAIL_DIR}"/ignored_file > > +touch "${MAIL_DIR}"/.ignored_hidden_file > > +output=$(NOTMUCH_NEW 2>&1) > > +test_expect_equal "$output" \ > > +"Note: Ignoring non-mail file: ${MAIL_DIR}/.git/config > > +Note: Ignoring non-mail file: ${MAIL_DIR}/.ignored_hidden_file > > +Note: Ignoring non-mail file: ${MAIL_DIR}/ignored_file > > +Added 1 new message to the database." > > + > > +test_begin_subtest "Ignore files and directories specified in new.ignore" > > +test_subtest_known_broken > > +generate_message > > +notmuch config set new.ignore .git ignored_file .ignored_hidden_file > > +mkdir -p "${MAIL_DIR}"/.git && touch "${MAIL_DIR}"/.git/config > > This doesn't change .git's mtime, so notmuch new may not scan it (*may* > not because it's possible/likely notmuch refused to record the mtime in > the above test on account of lack of granularity). Probably you should > just touch "${MAIL_DIR}"/.git. Or maybe touch a new file under it. > Good point. > > +touch "${MAIL_DIR}"/ignored_file > > +touch "${MAIL_DIR}"/.ignored_hidden_file > > These aren't necessary since these files already exist and they won't > touch the directory's mtime (though the generate_message will). > Those are/were intended to keep the test self-contained (i.e. independent of the previous one). Probably should've added a comment about that. > > +output=$(NOTMUCH_NEW 2>&1) > > +test_expect_equal "$output" "Added 1 new message to the database." > > + > > + > > test_done > > -- > > 1.7.8.1 > > > > _______________________________________________ > > notmuch mailing list > > notmuch@notmuchmail.org > > http://notmuchmail.org/mailman/listinfo/notmuch > > Thanks for reviewing! Peace -- Pieter ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH] added support for user-specified files & directories to ignore 2011-09-13 21:32 [PATCH 0/3] Configuration file option to exclude files/directories tomi.ollila ` (3 preceding siblings ...) 2011-12-07 23:51 ` [PATCH 0/3] Configuration file option to exclude files/directories David Bremner @ 2012-01-31 16:28 ` Tomi Ollila 2012-02-01 14:25 ` Pieter Praet ` (2 more replies) 2012-02-06 9:28 ` [PATCH v6 1/3] test: add tests wrt ignoring user-specified files and directories Tomi Ollila 2012-02-15 9:17 ` [PATCH v7 0/3] NEWS and test comment adjustments Tomi Ollila 6 siblings, 3 replies; 58+ messages in thread From: Tomi Ollila @ 2012-01-31 16:28 UTC (permalink / raw) To: notmuch; +Cc: Tomi Ollila A new configuration key 'new.ignore' is used to determine which files and directories user wants not to be scanned as new mails. This work merges my previous attempts and Andreas Amann's work in id:"ylp7hi23mw8.fsf@tyndall.ie" See notes in id:"20120131-new-ignore-1-git-send-email-too@iki.fi" --- Notes 1) Currently there is comment for new.ignore in newly created configuration file but as the list is initially empty there will be not tag in place. 2) Whenever some already existing directory is added to the exclude list and the parent directory timestamp has not changed, notmuch new will not notice the directory has gone (as it still is there), user needs to 'touch' the parent directory before next 'notmuch new' no make notmuch notice. 2012-01-26: could notmuch track mtime of the configuration file and if that changes, ignore mail directory timestamps ? 3) in id:"1327572718-13411-2-git-send-email-tomi.ollila@iki.fi" dropped... notmuch-client.h | 8 ++++++++ notmuch-config.c | 35 +++++++++++++++++++++++++++++++++-- notmuch-new.c | 45 +++++++++++++++++++++++++++++++++------------ 3 files changed, 74 insertions(+), 14 deletions(-) diff --git a/notmuch-client.h b/notmuch-client.h index e0eb594..c62ce78 100644 --- a/notmuch-client.h +++ b/notmuch-client.h @@ -250,6 +250,14 @@ notmuch_config_set_new_tags (notmuch_config_t *config, const char *new_tags[], size_t length); +const char ** +notmuch_config_get_new_ignore (notmuch_config_t *config, + size_t *length); +void +notmuch_config_set_new_ignore (notmuch_config_t *config, + const char *new_ignore[], + size_t length); + notmuch_bool_t notmuch_config_get_maildir_synchronize_flags (notmuch_config_t *config); diff --git a/notmuch-config.c b/notmuch-config.c index a124e34..f1cc5c2 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -44,7 +44,10 @@ static const char new_config_comment[] = " The following options are supported here:\n" "\n" "\ttags A list (separated by ';') of the tags that will be\n" - "\t added to all messages incorporated by \"notmuch new\".\n"; + "\t added to all messages incorporated by \"notmuch new\".\n" + "\n" + "\tignore A list (separated by ';') of files and directories that" + "\t will not be searched for messages by \"notmuch new\".\n"; static const char user_config_comment[] = " User configuration\n" @@ -105,6 +108,8 @@ struct _notmuch_config { size_t user_other_email_length; const char **new_tags; size_t new_tags_length; + const char **new_ignore; + size_t new_ignore_length; notmuch_bool_t maildir_synchronize_flags; const char **search_exclude_tags; size_t search_exclude_tags_length; @@ -264,6 +269,8 @@ notmuch_config_open (void *ctx, config->user_other_email_length = 0; config->new_tags = NULL; config->new_tags_length = 0; + config->new_ignore = NULL; + config->new_ignore_length = 0; config->maildir_synchronize_flags = TRUE; config->search_exclude_tags = NULL; config->search_exclude_tags_length = 0; @@ -360,7 +367,11 @@ notmuch_config_open (void *ctx, const char *tags[] = { "unread", "inbox" }; notmuch_config_set_new_tags (config, tags, 2); } - +#if 0 /* No point setting empty list -- it's not written */ + if (notmuch_config_get_new_ignore (config, &tmp) == NULL) { + notmuch_config_set_new_ignore (config, NULL, 0); + } +#endif if (notmuch_config_get_search_exclude_tags (config, &tmp) == NULL) { if (is_new) { const char *tags[] = { "deleted", "spam" }; @@ -609,6 +620,15 @@ notmuch_config_get_new_tags (notmuch_config_t *config, size_t *length) &(config->new_tags_length), length); } +const char ** +notmuch_config_get_new_ignore (notmuch_config_t *config, size_t *length) +{ + return _config_get_list (config, "new", "ignore", + &(config->new_ignore), + &(config->new_ignore_length), length); +} + + void notmuch_config_set_user_other_email (notmuch_config_t *config, const char *list[], @@ -627,6 +647,17 @@ notmuch_config_set_new_tags (notmuch_config_t *config, &(config->new_tags)); } +#if 0 /* UNNEEDED SO FAR */ +void +notmuch_config_set_new_ignore (notmuch_config_t *config, + const char *list[], + size_t length) +{ + _config_set_list (config, "new", "ignore", list, length, + &(config->new_ignore)); +} +#endif + const char ** notmuch_config_get_search_exclude_tags (notmuch_config_t *config, size_t *length) { diff --git a/notmuch-new.c b/notmuch-new.c index a569a54..36d5c5d 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -39,6 +39,8 @@ typedef struct { int verbose; const char **new_tags; size_t new_tags_length; + const char **new_ignore; + size_t new_ignore_length; int total_files; int processed_files; @@ -181,6 +183,20 @@ _entries_resemble_maildir (struct dirent **entries, int count) return 0; } +/* Check if user asked to ignore these files/directories */ + +static int +_entry_in_ignore_list (const char *entry, add_files_state_t *state) +{ + size_t i, ignore_length = state->new_ignore_length; + + for (i = 0; i < ignore_length; i++) + if (strcmp (entry, state->new_ignore[i]) == 0) + return 1; + + return 0; +} + /* Examine 'path' recursively as follows: * * o Ask the filesystem for the mtime of 'path' (fs_mtime) @@ -320,15 +336,15 @@ add_files_recursive (notmuch_database_t *notmuch, } /* Ignore special directories to avoid infinite recursion. - * Also ignore the .notmuch directory and any "tmp" directory - * that appears within a maildir. + * Also ignore the .notmuch directory, any "tmp" directory + * that appears within a maildir and files/directories + * user have configured to be ignored. */ - /* XXX: Eventually we'll want more sophistication to let the - * user specify files to be ignored. */ 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 || + _entry_in_ignore_list (entry->d_name, state)) { continue; } @@ -369,6 +385,10 @@ add_files_recursive (notmuch_database_t *notmuch, entry = fs_entries[i]; + /* Ignore files & directories user has configured to be ignored */ + if (_entry_in_ignore_list (entry->d_name, state)) + continue; + /* Check if we've walked past any names in db_files or * db_subdirs. If so, these have been deleted. */ while (notmuch_filenames_valid (db_files) && @@ -648,7 +668,7 @@ add_files (notmuch_database_t *notmuch, * initialized to zero by the top-level caller before calling * count_files). */ static void -count_files (const char *path, int *count) +count_files (const char *path, int *count, add_files_state_t *state) { struct dirent *entry = NULL; char *next; @@ -670,13 +690,13 @@ count_files (const char *path, int *count) entry = fs_entries[i++]; /* Ignore special directories to avoid infinite recursion. - * Also ignore the .notmuch directory. + * Also ignore the .notmuch directory and files/directories + * user have configured to be ignored. */ - /* XXX: Eventually we'll want more sophistication to let the - * user specify files to be ignored. */ if (strcmp (entry->d_name, ".") == 0 || strcmp (entry->d_name, "..") == 0 || - strcmp (entry->d_name, ".notmuch") == 0) + strcmp (entry->d_name, ".notmuch") == 0 || + _entry_in_ignore_list (entry->d_name, state)) { continue; } @@ -697,7 +717,7 @@ count_files (const char *path, int *count) fflush (stdout); } } else if (S_ISDIR (st.st_mode)) { - count_files (next, count); + count_files (next, count, state); } free (next); @@ -837,6 +857,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) return 1; add_files_state.new_tags = notmuch_config_get_new_tags (config, &add_files_state.new_tags_length); + add_files_state.new_ignore = notmuch_config_get_new_ignore (config, &add_files_state.new_ignore_length); add_files_state.synchronize_flags = notmuch_config_get_maildir_synchronize_flags (config); db_path = notmuch_config_get_database_path (config); @@ -852,7 +873,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) int count; count = 0; - count_files (db_path, &count); + count_files (db_path, &count, &add_files_state); if (interrupted) return 1; -- 1.7.6.5 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: [PATCH] added support for user-specified files & directories to ignore 2012-01-31 16:28 ` [PATCH] added support for user-specified files & directories to ignore Tomi Ollila @ 2012-02-01 14:25 ` Pieter Praet 2012-02-01 14:49 ` Jani Nikula 2012-02-01 16:30 ` Austin Clements 2 siblings, 0 replies; 58+ messages in thread From: Pieter Praet @ 2012-02-01 14:25 UTC (permalink / raw) To: Tomi Ollila, notmuch; +Cc: Tomi Ollila On Tue, 31 Jan 2012 18:28:04 +0200, Tomi Ollila <tomi.ollila@iki.fi> wrote: > A new configuration key 'new.ignore' is used to determine which > files and directories user wants not to be scanned as new mails. > > This work merges my previous attempts and Andreas Amann's work > in id:"ylp7hi23mw8.fsf@tyndall.ie" > > See notes in id:"20120131-new-ignore-1-git-send-email-too@iki.fi" > --- Great work Tomi! LGTM (though keep in mind, I'm no C coder). > Notes > > 1) Currently there is comment for new.ignore in newly created configuration > file but as the list is initially empty there will be not tag in place. > > 2) Whenever some already existing directory is added to the exclude list > and the parent directory timestamp has not changed, notmuch new will not > notice the directory has gone (as it still is there), user needs to 'touch' > the parent directory before next 'notmuch new' no make notmuch notice. > > 2012-01-26: could notmuch track mtime of the configuration file and if > that changes, ignore mail directory timestamps ? > > > 3) in id:"1327572718-13411-2-git-send-email-tomi.ollila@iki.fi" dropped... > > notmuch-client.h | 8 ++++++++ > notmuch-config.c | 35 +++++++++++++++++++++++++++++++++-- > notmuch-new.c | 45 +++++++++++++++++++++++++++++++++------------ > 3 files changed, 74 insertions(+), 14 deletions(-) > > diff --git a/notmuch-client.h b/notmuch-client.h > index e0eb594..c62ce78 100644 > --- a/notmuch-client.h > +++ b/notmuch-client.h > @@ -250,6 +250,14 @@ notmuch_config_set_new_tags (notmuch_config_t *config, > const char *new_tags[], > size_t length); > > +const char ** > +notmuch_config_get_new_ignore (notmuch_config_t *config, > + size_t *length); > +void > +notmuch_config_set_new_ignore (notmuch_config_t *config, > + const char *new_ignore[], > + size_t length); > + > notmuch_bool_t > notmuch_config_get_maildir_synchronize_flags (notmuch_config_t *config); > > diff --git a/notmuch-config.c b/notmuch-config.c > index a124e34..f1cc5c2 100644 > --- a/notmuch-config.c > +++ b/notmuch-config.c > @@ -44,7 +44,10 @@ static const char new_config_comment[] = > " The following options are supported here:\n" > "\n" > "\ttags A list (separated by ';') of the tags that will be\n" > - "\t added to all messages incorporated by \"notmuch new\".\n"; > + "\t added to all messages incorporated by \"notmuch new\".\n" > + "\n" > + "\tignore A list (separated by ';') of files and directories that" > + "\t will not be searched for messages by \"notmuch new\".\n"; > > static const char user_config_comment[] = > " User configuration\n" > @@ -105,6 +108,8 @@ struct _notmuch_config { > size_t user_other_email_length; > const char **new_tags; > size_t new_tags_length; > + const char **new_ignore; > + size_t new_ignore_length; > notmuch_bool_t maildir_synchronize_flags; > const char **search_exclude_tags; > size_t search_exclude_tags_length; > @@ -264,6 +269,8 @@ notmuch_config_open (void *ctx, > config->user_other_email_length = 0; > config->new_tags = NULL; > config->new_tags_length = 0; > + config->new_ignore = NULL; > + config->new_ignore_length = 0; > config->maildir_synchronize_flags = TRUE; > config->search_exclude_tags = NULL; > config->search_exclude_tags_length = 0; > @@ -360,7 +367,11 @@ notmuch_config_open (void *ctx, > const char *tags[] = { "unread", "inbox" }; > notmuch_config_set_new_tags (config, tags, 2); > } > - > +#if 0 /* No point setting empty list -- it's not written */ > + if (notmuch_config_get_new_ignore (config, &tmp) == NULL) { > + notmuch_config_set_new_ignore (config, NULL, 0); > + } > +#endif > if (notmuch_config_get_search_exclude_tags (config, &tmp) == NULL) { > if (is_new) { > const char *tags[] = { "deleted", "spam" }; > @@ -609,6 +620,15 @@ notmuch_config_get_new_tags (notmuch_config_t *config, size_t *length) > &(config->new_tags_length), length); > } > > +const char ** > +notmuch_config_get_new_ignore (notmuch_config_t *config, size_t *length) > +{ > + return _config_get_list (config, "new", "ignore", > + &(config->new_ignore), > + &(config->new_ignore_length), length); > +} > + > + > void > notmuch_config_set_user_other_email (notmuch_config_t *config, > const char *list[], > @@ -627,6 +647,17 @@ notmuch_config_set_new_tags (notmuch_config_t *config, > &(config->new_tags)); > } > > +#if 0 /* UNNEEDED SO FAR */ > +void > +notmuch_config_set_new_ignore (notmuch_config_t *config, > + const char *list[], > + size_t length) > +{ > + _config_set_list (config, "new", "ignore", list, length, > + &(config->new_ignore)); > +} > +#endif > + Is this really discarded during compilation ?!? The results of my test [1] suggest otherwise... > const char ** > notmuch_config_get_search_exclude_tags (notmuch_config_t *config, size_t *length) > { > diff --git a/notmuch-new.c b/notmuch-new.c > index a569a54..36d5c5d 100644 > --- a/notmuch-new.c > +++ b/notmuch-new.c > @@ -39,6 +39,8 @@ typedef struct { > int verbose; > const char **new_tags; > size_t new_tags_length; > + const char **new_ignore; > + size_t new_ignore_length; > > int total_files; > int processed_files; > @@ -181,6 +183,20 @@ _entries_resemble_maildir (struct dirent **entries, int count) > return 0; > } > > +/* Check if user asked to ignore these files/directories */ > + > +static int > +_entry_in_ignore_list (const char *entry, add_files_state_t *state) > +{ > + size_t i, ignore_length = state->new_ignore_length; > + > + for (i = 0; i < ignore_length; i++) > + if (strcmp (entry, state->new_ignore[i]) == 0) > + return 1; > + > + return 0; > +} > + > /* Examine 'path' recursively as follows: > * > * o Ask the filesystem for the mtime of 'path' (fs_mtime) > @@ -320,15 +336,15 @@ add_files_recursive (notmuch_database_t *notmuch, > } > > /* Ignore special directories to avoid infinite recursion. > - * Also ignore the .notmuch directory and any "tmp" directory > - * that appears within a maildir. > + * Also ignore the .notmuch directory, any "tmp" directory > + * that appears within a maildir and files/directories > + * user have configured to be ignored. > */ > - /* XXX: Eventually we'll want more sophistication to let the > - * user specify files to be ignored. */ > 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 || > + _entry_in_ignore_list (entry->d_name, state)) > { > continue; > } > @@ -369,6 +385,10 @@ add_files_recursive (notmuch_database_t *notmuch, > > entry = fs_entries[i]; > > + /* Ignore files & directories user has configured to be ignored */ > + if (_entry_in_ignore_list (entry->d_name, state)) > + continue; > + > /* Check if we've walked past any names in db_files or > * db_subdirs. If so, these have been deleted. */ > while (notmuch_filenames_valid (db_files) && > @@ -648,7 +668,7 @@ add_files (notmuch_database_t *notmuch, > * initialized to zero by the top-level caller before calling > * count_files). */ > static void > -count_files (const char *path, int *count) > +count_files (const char *path, int *count, add_files_state_t *state) > { > struct dirent *entry = NULL; > char *next; > @@ -670,13 +690,13 @@ count_files (const char *path, int *count) > entry = fs_entries[i++]; > > /* Ignore special directories to avoid infinite recursion. > - * Also ignore the .notmuch directory. > + * Also ignore the .notmuch directory and files/directories > + * user have configured to be ignored. > */ > - /* XXX: Eventually we'll want more sophistication to let the > - * user specify files to be ignored. */ > if (strcmp (entry->d_name, ".") == 0 || > strcmp (entry->d_name, "..") == 0 || > - strcmp (entry->d_name, ".notmuch") == 0) > + strcmp (entry->d_name, ".notmuch") == 0 || > + _entry_in_ignore_list (entry->d_name, state)) > { > continue; > } > @@ -697,7 +717,7 @@ count_files (const char *path, int *count) > fflush (stdout); > } > } else if (S_ISDIR (st.st_mode)) { > - count_files (next, count); > + count_files (next, count, state); > } > > free (next); > @@ -837,6 +857,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) > return 1; > > add_files_state.new_tags = notmuch_config_get_new_tags (config, &add_files_state.new_tags_length); > + add_files_state.new_ignore = notmuch_config_get_new_ignore (config, &add_files_state.new_ignore_length); > add_files_state.synchronize_flags = notmuch_config_get_maildir_synchronize_flags (config); > db_path = notmuch_config_get_database_path (config); > > @@ -852,7 +873,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) > int count; > > count = 0; > - count_files (db_path, &count); > + count_files (db_path, &count, &add_files_state); > if (interrupted) > return 1; > > -- > 1.7.6.5 > > _______________________________________________ > notmuch mailing list > notmuch@notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch Peace -- Pieter [1] id:"1328105573-4626-1-git-send-email-pieter@praet.org" ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH] added support for user-specified files & directories to ignore 2012-01-31 16:28 ` [PATCH] added support for user-specified files & directories to ignore Tomi Ollila 2012-02-01 14:25 ` Pieter Praet @ 2012-02-01 14:49 ` Jani Nikula 2012-02-01 16:30 ` Austin Clements 2 siblings, 0 replies; 58+ messages in thread From: Jani Nikula @ 2012-02-01 14:49 UTC (permalink / raw) To: Tomi Ollila, notmuch; +Cc: Tomi Ollila On Tue, 31 Jan 2012 18:28:04 +0200, Tomi Ollila <tomi.ollila@iki.fi> wrote: > A new configuration key 'new.ignore' is used to determine which > files and directories user wants not to be scanned as new mails. Hi, please find a few drive-by "while my code is compiling" nitpick review comments inline. ;) Mostly looks good. BR, Jani. > > This work merges my previous attempts and Andreas Amann's work > in id:"ylp7hi23mw8.fsf@tyndall.ie" > > See notes in id:"20120131-new-ignore-1-git-send-email-too@iki.fi" > --- > Notes > > 1) Currently there is comment for new.ignore in newly created configuration > file but as the list is initially empty there will be not tag in place. > > 2) Whenever some already existing directory is added to the exclude list > and the parent directory timestamp has not changed, notmuch new will not > notice the directory has gone (as it still is there), user needs to 'touch' > the parent directory before next 'notmuch new' no make notmuch notice. > > 2012-01-26: could notmuch track mtime of the configuration file and if > that changes, ignore mail directory timestamps ? > > > 3) in id:"1327572718-13411-2-git-send-email-tomi.ollila@iki.fi" dropped... > > notmuch-client.h | 8 ++++++++ > notmuch-config.c | 35 +++++++++++++++++++++++++++++++++-- > notmuch-new.c | 45 +++++++++++++++++++++++++++++++++------------ > 3 files changed, 74 insertions(+), 14 deletions(-) > > diff --git a/notmuch-client.h b/notmuch-client.h > index e0eb594..c62ce78 100644 > --- a/notmuch-client.h > +++ b/notmuch-client.h > @@ -250,6 +250,14 @@ notmuch_config_set_new_tags (notmuch_config_t *config, > const char *new_tags[], > size_t length); > > +const char ** > +notmuch_config_get_new_ignore (notmuch_config_t *config, > + size_t *length); > +void > +notmuch_config_set_new_ignore (notmuch_config_t *config, > + const char *new_ignore[], > + size_t length); > + > notmuch_bool_t > notmuch_config_get_maildir_synchronize_flags (notmuch_config_t *config); > > diff --git a/notmuch-config.c b/notmuch-config.c > index a124e34..f1cc5c2 100644 > --- a/notmuch-config.c > +++ b/notmuch-config.c > @@ -44,7 +44,10 @@ static const char new_config_comment[] = > " The following options are supported here:\n" > "\n" > "\ttags A list (separated by ';') of the tags that will be\n" > - "\t added to all messages incorporated by \"notmuch new\".\n"; > + "\t added to all messages incorporated by \"notmuch new\".\n" > + "\n" > + "\tignore A list (separated by ';') of files and directories that" > + "\t will not be searched for messages by \"notmuch new\".\n"; > > static const char user_config_comment[] = > " User configuration\n" > @@ -105,6 +108,8 @@ struct _notmuch_config { > size_t user_other_email_length; > const char **new_tags; > size_t new_tags_length; > + const char **new_ignore; > + size_t new_ignore_length; > notmuch_bool_t maildir_synchronize_flags; > const char **search_exclude_tags; > size_t search_exclude_tags_length; > @@ -264,6 +269,8 @@ notmuch_config_open (void *ctx, > config->user_other_email_length = 0; > config->new_tags = NULL; > config->new_tags_length = 0; > + config->new_ignore = NULL; > + config->new_ignore_length = 0; > config->maildir_synchronize_flags = TRUE; > config->search_exclude_tags = NULL; > config->search_exclude_tags_length = 0; > @@ -360,7 +367,11 @@ notmuch_config_open (void *ctx, > const char *tags[] = { "unread", "inbox" }; > notmuch_config_set_new_tags (config, tags, 2); > } > - > +#if 0 /* No point setting empty list -- it's not written */ > + if (notmuch_config_get_new_ignore (config, &tmp) == NULL) { > + notmuch_config_set_new_ignore (config, NULL, 0); > + } > +#endif I'd prefer not having any #if 0 code. How about just having the code there, even if it ends up being a NOP? You never know when the config plumbing is going to change (it could use some love), e.g. it might write the default value in comments in the future. > if (notmuch_config_get_search_exclude_tags (config, &tmp) == NULL) { > if (is_new) { > const char *tags[] = { "deleted", "spam" }; > @@ -609,6 +620,15 @@ notmuch_config_get_new_tags (notmuch_config_t *config, size_t *length) > &(config->new_tags_length), length); > } > > +const char ** > +notmuch_config_get_new_ignore (notmuch_config_t *config, size_t *length) Is there extra space in there? > +{ > + return _config_get_list (config, "new", "ignore", > + &(config->new_ignore), > + &(config->new_ignore_length), length); > +} > + > + > void > notmuch_config_set_user_other_email (notmuch_config_t *config, > const char *list[], > @@ -627,6 +647,17 @@ notmuch_config_set_new_tags (notmuch_config_t *config, > &(config->new_tags)); > } > > +#if 0 /* UNNEEDED SO FAR */ > +void > +notmuch_config_set_new_ignore (notmuch_config_t *config, > + const char *list[], > + size_t length) > +{ > + _config_set_list (config, "new", "ignore", list, length, > + &(config->new_ignore)); > +} > +#endif Same here, just remove the #if 0. > + > const char ** > notmuch_config_get_search_exclude_tags (notmuch_config_t *config, size_t *length) > { > diff --git a/notmuch-new.c b/notmuch-new.c > index a569a54..36d5c5d 100644 > --- a/notmuch-new.c > +++ b/notmuch-new.c > @@ -39,6 +39,8 @@ typedef struct { > int verbose; > const char **new_tags; > size_t new_tags_length; > + const char **new_ignore; > + size_t new_ignore_length; > > int total_files; > int processed_files; > @@ -181,6 +183,20 @@ _entries_resemble_maildir (struct dirent **entries, int count) > return 0; > } > > +/* Check if user asked to ignore these files/directories */ > + > +static int notmuch_bool_t? > +_entry_in_ignore_list (const char *entry, add_files_state_t *state) > +{ > + size_t i, ignore_length = state->new_ignore_length; ignore_length is an unnecessary temp variable. > + > + for (i = 0; i < ignore_length; i++) > + if (strcmp (entry, state->new_ignore[i]) == 0) > + return 1; > + > + return 0; > +} > + > /* Examine 'path' recursively as follows: > * > * o Ask the filesystem for the mtime of 'path' (fs_mtime) > @@ -320,15 +336,15 @@ add_files_recursive (notmuch_database_t *notmuch, > } > > /* Ignore special directories to avoid infinite recursion. > - * Also ignore the .notmuch directory and any "tmp" directory > - * that appears within a maildir. > + * Also ignore the .notmuch directory, any "tmp" directory > + * that appears within a maildir and files/directories > + * user have configured to be ignored. s/user have/the user has/ ? > */ > - /* XXX: Eventually we'll want more sophistication to let the > - * user specify files to be ignored. */ > 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 || > + _entry_in_ignore_list (entry->d_name, state)) > { > continue; > } > @@ -369,6 +385,10 @@ add_files_recursive (notmuch_database_t *notmuch, > > entry = fs_entries[i]; > > + /* Ignore files & directories user has configured to be ignored */ > + if (_entry_in_ignore_list (entry->d_name, state)) > + continue; > + > /* Check if we've walked past any names in db_files or > * db_subdirs. If so, these have been deleted. */ > while (notmuch_filenames_valid (db_files) && > @@ -648,7 +668,7 @@ add_files (notmuch_database_t *notmuch, > * initialized to zero by the top-level caller before calling > * count_files). */ > static void > -count_files (const char *path, int *count) > +count_files (const char *path, int *count, add_files_state_t *state) > { > struct dirent *entry = NULL; > char *next; > @@ -670,13 +690,13 @@ count_files (const char *path, int *count) > entry = fs_entries[i++]; > > /* Ignore special directories to avoid infinite recursion. > - * Also ignore the .notmuch directory. > + * Also ignore the .notmuch directory and files/directories > + * user have configured to be ignored. Same as above. > */ > - /* XXX: Eventually we'll want more sophistication to let the > - * user specify files to be ignored. */ Oh, you think this is enough sophistication! ;) > if (strcmp (entry->d_name, ".") == 0 || > strcmp (entry->d_name, "..") == 0 || > - strcmp (entry->d_name, ".notmuch") == 0) > + strcmp (entry->d_name, ".notmuch") == 0 || > + _entry_in_ignore_list (entry->d_name, state)) > { > continue; > } > @@ -697,7 +717,7 @@ count_files (const char *path, int *count) > fflush (stdout); > } > } else if (S_ISDIR (st.st_mode)) { > - count_files (next, count); > + count_files (next, count, state); > } > > free (next); > @@ -837,6 +857,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) > return 1; > > add_files_state.new_tags = notmuch_config_get_new_tags (config, &add_files_state.new_tags_length); > + add_files_state.new_ignore = notmuch_config_get_new_ignore (config, &add_files_state.new_ignore_length); > add_files_state.synchronize_flags = notmuch_config_get_maildir_synchronize_flags (config); > db_path = notmuch_config_get_database_path (config); > > @@ -852,7 +873,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) > int count; > > count = 0; > - count_files (db_path, &count); > + count_files (db_path, &count, &add_files_state); > if (interrupted) > return 1; > > -- > 1.7.6.5 > > _______________________________________________ > notmuch mailing list > notmuch@notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH] added support for user-specified files & directories to ignore 2012-01-31 16:28 ` [PATCH] added support for user-specified files & directories to ignore Tomi Ollila 2012-02-01 14:25 ` Pieter Praet 2012-02-01 14:49 ` Jani Nikula @ 2012-02-01 16:30 ` Austin Clements 2 siblings, 0 replies; 58+ messages in thread From: Austin Clements @ 2012-02-01 16:30 UTC (permalink / raw) To: Tomi Ollila; +Cc: notmuch Quoth Tomi Ollila on Jan 31 at 6:28 pm: > A new configuration key 'new.ignore' is used to determine which > files and directories user wants not to be scanned as new mails. > > This work merges my previous attempts and Andreas Amann's work > in id:"ylp7hi23mw8.fsf@tyndall.ie" > > See notes in id:"20120131-new-ignore-1-git-send-email-too@iki.fi" > --- > Notes > > 1) Currently there is comment for new.ignore in newly created configuration > file but as the list is initially empty there will be not tag in place. > > 2) Whenever some already existing directory is added to the exclude list > and the parent directory timestamp has not changed, notmuch new will not > notice the directory has gone (as it still is there), user needs to 'touch' > the parent directory before next 'notmuch new' no make notmuch notice. > > 2012-01-26: could notmuch track mtime of the configuration file and if > that changes, ignore mail directory timestamps ? > > > 3) in id:"1327572718-13411-2-git-send-email-tomi.ollila@iki.fi" dropped... > > notmuch-client.h | 8 ++++++++ > notmuch-config.c | 35 +++++++++++++++++++++++++++++++++-- > notmuch-new.c | 45 +++++++++++++++++++++++++++++++++------------ > 3 files changed, 74 insertions(+), 14 deletions(-) > > diff --git a/notmuch-client.h b/notmuch-client.h > index e0eb594..c62ce78 100644 > --- a/notmuch-client.h > +++ b/notmuch-client.h > @@ -250,6 +250,14 @@ notmuch_config_set_new_tags (notmuch_config_t *config, > const char *new_tags[], > size_t length); > > +const char ** > +notmuch_config_get_new_ignore (notmuch_config_t *config, > + size_t *length); Missing blank line. > +void > +notmuch_config_set_new_ignore (notmuch_config_t *config, > + const char *new_ignore[], > + size_t length); > + > notmuch_bool_t > notmuch_config_get_maildir_synchronize_flags (notmuch_config_t *config); > > diff --git a/notmuch-config.c b/notmuch-config.c > index a124e34..f1cc5c2 100644 > --- a/notmuch-config.c > +++ b/notmuch-config.c > @@ -44,7 +44,10 @@ static const char new_config_comment[] = > " The following options are supported here:\n" > "\n" > "\ttags A list (separated by ';') of the tags that will be\n" > - "\t added to all messages incorporated by \"notmuch new\".\n"; > + "\t added to all messages incorporated by \"notmuch new\".\n" > + "\n" > + "\tignore A list (separated by ';') of files and directories that" > + "\t will not be searched for messages by \"notmuch new\".\n"; This can be interpreted in a lot of ways (e.g., absolute paths, paths relative to database.path, etc) but is expecting something very specific. Maybe "file and directory names"? > > static const char user_config_comment[] = > " User configuration\n" > @@ -105,6 +108,8 @@ struct _notmuch_config { > size_t user_other_email_length; > const char **new_tags; > size_t new_tags_length; > + const char **new_ignore; > + size_t new_ignore_length; > notmuch_bool_t maildir_synchronize_flags; > const char **search_exclude_tags; > size_t search_exclude_tags_length; > @@ -264,6 +269,8 @@ notmuch_config_open (void *ctx, > config->user_other_email_length = 0; > config->new_tags = NULL; > config->new_tags_length = 0; > + config->new_ignore = NULL; > + config->new_ignore_length = 0; > config->maildir_synchronize_flags = TRUE; > config->search_exclude_tags = NULL; > config->search_exclude_tags_length = 0; > @@ -360,7 +367,11 @@ notmuch_config_open (void *ctx, > const char *tags[] = { "unread", "inbox" }; > notmuch_config_set_new_tags (config, tags, 2); > } > - Looks like you lost a blank line. > +#if 0 /* No point setting empty list -- it's not written */ > + if (notmuch_config_get_new_ignore (config, &tmp) == NULL) { > + notmuch_config_set_new_ignore (config, NULL, 0); > + } > +#endif This *does* matter. It affects whether or not this key appears in saved configuration files (both updated ones and new ones). For discoverability's sake (especially since we don't have a way to update the section's comment), it should appear, even though it's blank. (For the record, I think 'notmuch config set's behavior of removing a key if given no arguments is broken; because of how we handle defaults, this is completely asymmetric behavior, plus it seems to screw up group comments.) Also, there should be another blank line after the if. > if (notmuch_config_get_search_exclude_tags (config, &tmp) == NULL) { > if (is_new) { > const char *tags[] = { "deleted", "spam" }; > @@ -609,6 +620,15 @@ notmuch_config_get_new_tags (notmuch_config_t *config, size_t *length) > &(config->new_tags_length), length); > } > > +const char ** > +notmuch_config_get_new_ignore (notmuch_config_t *config, size_t *length) > +{ > + return _config_get_list (config, "new", "ignore", > + &(config->new_ignore), > + &(config->new_ignore_length), length); > +} > + > + One extra blank line. > void > notmuch_config_set_user_other_email (notmuch_config_t *config, > const char *list[], > @@ -627,6 +647,17 @@ notmuch_config_set_new_tags (notmuch_config_t *config, > &(config->new_tags)); > } > > +#if 0 /* UNNEEDED SO FAR */ Include this, even if we don't need it. > +void > +notmuch_config_set_new_ignore (notmuch_config_t *config, > + const char *list[], > + size_t length) > +{ > + _config_set_list (config, "new", "ignore", list, length, > + &(config->new_ignore)); > +} > +#endif > + > const char ** > notmuch_config_get_search_exclude_tags (notmuch_config_t *config, size_t *length) > { > diff --git a/notmuch-new.c b/notmuch-new.c > index a569a54..36d5c5d 100644 > --- a/notmuch-new.c > +++ b/notmuch-new.c > @@ -39,6 +39,8 @@ typedef struct { > int verbose; > const char **new_tags; > size_t new_tags_length; > + const char **new_ignore; > + size_t new_ignore_length; > > int total_files; > int processed_files; > @@ -181,6 +183,20 @@ _entries_resemble_maildir (struct dirent **entries, int count) > return 0; > } > > +/* Check if user asked to ignore these files/directories */ > + No blank line. > +static int Could be notmuch_bool_t (and TRUE and FALSE below). Up to you. > +_entry_in_ignore_list (const char *entry, add_files_state_t *state) > +{ > + size_t i, ignore_length = state->new_ignore_length; > + > + for (i = 0; i < ignore_length; i++) > + if (strcmp (entry, state->new_ignore[i]) == 0) > + return 1; > + > + return 0; > +} > + > /* Examine 'path' recursively as follows: > * > * o Ask the filesystem for the mtime of 'path' (fs_mtime) > @@ -320,15 +336,15 @@ add_files_recursive (notmuch_database_t *notmuch, > } > > /* Ignore special directories to avoid infinite recursion. > - * Also ignore the .notmuch directory and any "tmp" directory > - * that appears within a maildir. > + * Also ignore the .notmuch directory, any "tmp" directory > + * that appears within a maildir and files/directories > + * user have configured to be ignored. s/user have/the user has/ > */ > - /* XXX: Eventually we'll want more sophistication to let the > - * user specify files to be ignored. */ > 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 || > + _entry_in_ignore_list (entry->d_name, state)) Ah, nice simplification. > { > continue; > } > @@ -369,6 +385,10 @@ add_files_recursive (notmuch_database_t *notmuch, > > entry = fs_entries[i]; > > + /* Ignore files & directories user has configured to be ignored */ > + if (_entry_in_ignore_list (entry->d_name, state)) > + continue; > + > /* Check if we've walked past any names in db_files or > * db_subdirs. If so, these have been deleted. */ > while (notmuch_filenames_valid (db_files) && > @@ -648,7 +668,7 @@ add_files (notmuch_database_t *notmuch, > * initialized to zero by the top-level caller before calling > * count_files). */ > static void > -count_files (const char *path, int *count) > +count_files (const char *path, int *count, add_files_state_t *state) > { > struct dirent *entry = NULL; > char *next; > @@ -670,13 +690,13 @@ count_files (const char *path, int *count) > entry = fs_entries[i++]; > > /* Ignore special directories to avoid infinite recursion. > - * Also ignore the .notmuch directory. > + * Also ignore the .notmuch directory and files/directories > + * user have configured to be ignored. > */ > - /* XXX: Eventually we'll want more sophistication to let the > - * user specify files to be ignored. */ > if (strcmp (entry->d_name, ".") == 0 || > strcmp (entry->d_name, "..") == 0 || > - strcmp (entry->d_name, ".notmuch") == 0) > + strcmp (entry->d_name, ".notmuch") == 0 || > + _entry_in_ignore_list (entry->d_name, state)) > { > continue; > } > @@ -697,7 +717,7 @@ count_files (const char *path, int *count) > fflush (stdout); > } > } else if (S_ISDIR (st.st_mode)) { > - count_files (next, count); > + count_files (next, count, state); > } > > free (next); > @@ -837,6 +857,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) > return 1; > > add_files_state.new_tags = notmuch_config_get_new_tags (config, &add_files_state.new_tags_length); > + add_files_state.new_ignore = notmuch_config_get_new_ignore (config, &add_files_state.new_ignore_length); > add_files_state.synchronize_flags = notmuch_config_get_maildir_synchronize_flags (config); > db_path = notmuch_config_get_database_path (config); > > @@ -852,7 +873,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) > int count; > > count = 0; > - count_files (db_path, &count); > + count_files (db_path, &count, &add_files_state); > if (interrupted) > return 1; > ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v6 1/3] test: add tests wrt ignoring user-specified files and directories 2011-09-13 21:32 [PATCH 0/3] Configuration file option to exclude files/directories tomi.ollila ` (4 preceding siblings ...) 2012-01-31 16:28 ` [PATCH] added support for user-specified files & directories to ignore Tomi Ollila @ 2012-02-06 9:28 ` Tomi Ollila 2012-02-06 9:28 ` [PATCH v6 2/3] add support for user-specified files & directories to ignore Tomi Ollila ` (3 more replies) 2012-02-15 9:17 ` [PATCH v7 0/3] NEWS and test comment adjustments Tomi Ollila 6 siblings, 4 replies; 58+ messages in thread From: Tomi Ollila @ 2012-02-06 9:28 UTC (permalink / raw) To: notmuch; +Cc: Tomi Ollila Files and directories which are specified in 'new.ignore' in the config file shouldn't be indexed nor reported by `notmuch new'. This is basically Pieter's work with Austin's comments addressed. --- test/new | 22 ++++++++++++++++++++++ 1 files changed, 22 insertions(+), 0 deletions(-) diff --git a/test/new b/test/new index 49f390d..5ce8811 100755 --- a/test/new +++ b/test/new @@ -153,4 +153,26 @@ rm -rf "${MAIL_DIR}"/two output=$(NOTMUCH_NEW) test_expect_equal "$output" "No new mail. Removed 3 messages." +# This test depends that notmuch new has been run at least once. +test_begin_subtest "Skip and report non-mail files" +generate_message +mkdir -p "${MAIL_DIR}"/.git && touch "${MAIL_DIR}"/.git/config +touch "${MAIL_DIR}"/ignored_file +touch "${MAIL_DIR}"/.ignored_hidden_file +output=$(NOTMUCH_NEW 2>&1) +test_expect_equal "$output" \ +"Note: Ignoring non-mail file: ${MAIL_DIR}/.git/config +Note: Ignoring non-mail file: ${MAIL_DIR}/.ignored_hidden_file +Note: Ignoring non-mail file: ${MAIL_DIR}/ignored_file +Added 1 new message to the database." + +test_begin_subtest "Ignore files and directories specified in new.ignore" +test_subtest_known_broken +generate_message +notmuch config set new.ignore .git ignored_file .ignored_hidden_file +touch "${MAIL_DIR}"/.git # change .git's mtime for notmuch new to rescan. +output=$(NOTMUCH_NEW 2>&1) +test_expect_equal "$output" "Added 1 new message to the database." + + test_done -- 1.7.6.5 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* [PATCH v6 2/3] add support for user-specified files & directories to ignore 2012-02-06 9:28 ` [PATCH v6 1/3] test: add tests wrt ignoring user-specified files and directories Tomi Ollila @ 2012-02-06 9:28 ` Tomi Ollila 2012-02-06 9:50 ` Tomi Ollila 2012-02-06 9:28 ` [PATCH v6 3/3] NEWS: add news section for new.ignore Tomi Ollila ` (2 subsequent siblings) 3 siblings, 1 reply; 58+ messages in thread From: Tomi Ollila @ 2012-02-06 9:28 UTC (permalink / raw) To: notmuch; +Cc: Tomi Ollila A new configuration key 'new.ignore' is used to determine which files and directories user wants not to be scanned as new mails. Mark the corresponding test as no longer broken. This work merges my previous attempts and Andreas Amann's work in id:"ylp7hi23mw8.fsf@tyndall.ie" --- notmuch-client.h | 9 +++++++++ notmuch-config.c | 30 +++++++++++++++++++++++++++++- notmuch-new.c | 45 +++++++++++++++++++++++++++++++++------------ test/new | 1 - 4 files changed, 71 insertions(+), 14 deletions(-) diff --git a/notmuch-client.h b/notmuch-client.h index e0eb594..f1762ae 100644 --- a/notmuch-client.h +++ b/notmuch-client.h @@ -250,6 +250,15 @@ notmuch_config_set_new_tags (notmuch_config_t *config, const char *new_tags[], size_t length); +const char ** +notmuch_config_get_new_ignore (notmuch_config_t *config, + size_t *length); + +void +notmuch_config_set_new_ignore (notmuch_config_t *config, + const char *new_ignore[], + size_t length); + notmuch_bool_t notmuch_config_get_maildir_synchronize_flags (notmuch_config_t *config); diff --git a/notmuch-config.c b/notmuch-config.c index a124e34..1f01128 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -44,7 +44,10 @@ static const char new_config_comment[] = " The following options are supported here:\n" "\n" "\ttags A list (separated by ';') of the tags that will be\n" - "\t added to all messages incorporated by \"notmuch new\".\n"; + "\t added to all messages incorporated by \"notmuch new\".\n" + "\n" + "\tignore A list (separated by ';') of file and directory names\n" + "\t that will not be searched for messages by \"notmuch new\".\n"; static const char user_config_comment[] = " User configuration\n" @@ -105,6 +108,8 @@ struct _notmuch_config { size_t user_other_email_length; const char **new_tags; size_t new_tags_length; + const char **new_ignore; + size_t new_ignore_length; notmuch_bool_t maildir_synchronize_flags; const char **search_exclude_tags; size_t search_exclude_tags_length; @@ -264,6 +269,8 @@ notmuch_config_open (void *ctx, config->user_other_email_length = 0; config->new_tags = NULL; config->new_tags_length = 0; + config->new_ignore = NULL; + config->new_ignore_length = 0; config->maildir_synchronize_flags = TRUE; config->search_exclude_tags = NULL; config->search_exclude_tags_length = 0; @@ -361,6 +368,10 @@ notmuch_config_open (void *ctx, notmuch_config_set_new_tags (config, tags, 2); } + if (notmuch_config_get_new_ignore (config, &tmp) == NULL) { + notmuch_config_set_new_ignore (config, NULL, 0); + } + if (notmuch_config_get_search_exclude_tags (config, &tmp) == NULL) { if (is_new) { const char *tags[] = { "deleted", "spam" }; @@ -609,6 +620,14 @@ notmuch_config_get_new_tags (notmuch_config_t *config, size_t *length) &(config->new_tags_length), length); } +const char ** +notmuch_config_get_new_ignore (notmuch_config_t *config, size_t *length) +{ + return _config_get_list (config, "new", "ignore", + &(config->new_ignore), + &(config->new_ignore_length), length); +} + void notmuch_config_set_user_other_email (notmuch_config_t *config, const char *list[], @@ -627,6 +646,15 @@ notmuch_config_set_new_tags (notmuch_config_t *config, &(config->new_tags)); } +void +notmuch_config_set_new_ignore (notmuch_config_t *config, + const char *list[], + size_t length) +{ + _config_set_list (config, "new", "ignore", list, length, + &(config->new_ignore)); +} + const char ** notmuch_config_get_search_exclude_tags (notmuch_config_t *config, size_t *length) { diff --git a/notmuch-new.c b/notmuch-new.c index a569a54..8a615e6 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -39,6 +39,8 @@ typedef struct { int verbose; const char **new_tags; size_t new_tags_length; + const char **new_ignore; + size_t new_ignore_length; int total_files; int processed_files; @@ -181,6 +183,20 @@ _entries_resemble_maildir (struct dirent **entries, int count) return 0; } +/* Test if the file/directory is to be ignored. + */ +static notmuch_bool_t +_entry_in_ignore_list (const char *entry, add_files_state_t *state) +{ + size_t i; + + for (i = 0; i < state->new_ignore_length; i++) + if (strcmp (entry, state->new_ignore[i]) == 0) + return TRUE; + + return FALSE; +} + /* Examine 'path' recursively as follows: * * o Ask the filesystem for the mtime of 'path' (fs_mtime) @@ -320,15 +336,15 @@ add_files_recursive (notmuch_database_t *notmuch, } /* Ignore special directories to avoid infinite recursion. - * Also ignore the .notmuch directory and any "tmp" directory - * that appears within a maildir. + * Also ignore the .notmuch directory, any "tmp" directory + * that appears within a maildir and files/directories + * the user has configured to be ignored. */ - /* XXX: Eventually we'll want more sophistication to let the - * user specify files to be ignored. */ 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 || + _entry_in_ignore_list (entry->d_name, state)) { continue; } @@ -369,6 +385,10 @@ add_files_recursive (notmuch_database_t *notmuch, entry = fs_entries[i]; + /* Ignore files & directories user has configured to be ignored */ + if (_entry_in_ignore_list (entry->d_name, state)) + continue; + /* Check if we've walked past any names in db_files or * db_subdirs. If so, these have been deleted. */ while (notmuch_filenames_valid (db_files) && @@ -648,7 +668,7 @@ add_files (notmuch_database_t *notmuch, * initialized to zero by the top-level caller before calling * count_files). */ static void -count_files (const char *path, int *count) +count_files (const char *path, int *count, add_files_state_t *state) { struct dirent *entry = NULL; char *next; @@ -670,13 +690,13 @@ count_files (const char *path, int *count) entry = fs_entries[i++]; /* Ignore special directories to avoid infinite recursion. - * Also ignore the .notmuch directory. + * Also ignore the .notmuch directory and files/directories + * the user has configured to be ignored. */ - /* XXX: Eventually we'll want more sophistication to let the - * user specify files to be ignored. */ if (strcmp (entry->d_name, ".") == 0 || strcmp (entry->d_name, "..") == 0 || - strcmp (entry->d_name, ".notmuch") == 0) + strcmp (entry->d_name, ".notmuch") == 0 || + _entry_in_ignore_list (entry->d_name, state)) { continue; } @@ -697,7 +717,7 @@ count_files (const char *path, int *count) fflush (stdout); } } else if (S_ISDIR (st.st_mode)) { - count_files (next, count); + count_files (next, count, state); } free (next); @@ -837,6 +857,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) return 1; add_files_state.new_tags = notmuch_config_get_new_tags (config, &add_files_state.new_tags_length); + add_files_state.new_ignore = notmuch_config_get_new_ignore (config, &add_files_state.new_ignore_length); add_files_state.synchronize_flags = notmuch_config_get_maildir_synchronize_flags (config); db_path = notmuch_config_get_database_path (config); @@ -852,7 +873,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) int count; count = 0; - count_files (db_path, &count); + count_files (db_path, &count, &add_files_state); if (interrupted) return 1; diff --git a/test/new b/test/new index 5ce8811..2af63a1 100755 --- a/test/new +++ b/test/new @@ -167,7 +167,6 @@ Note: Ignoring non-mail file: ${MAIL_DIR}/ignored_file Added 1 new message to the database." test_begin_subtest "Ignore files and directories specified in new.ignore" -test_subtest_known_broken generate_message notmuch config set new.ignore .git ignored_file .ignored_hidden_file touch "${MAIL_DIR}"/.git # change .git's mtime for notmuch new to rescan. -- 1.7.6.5 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: [PATCH v6 2/3] add support for user-specified files & directories to ignore 2012-02-06 9:28 ` [PATCH v6 2/3] add support for user-specified files & directories to ignore Tomi Ollila @ 2012-02-06 9:50 ` Tomi Ollila 0 siblings, 0 replies; 58+ messages in thread From: Tomi Ollila @ 2012-02-06 9:50 UTC (permalink / raw) To: notmuch On Mon, 6 Feb 2012 11:28:24 +0200, Tomi Ollila <tomi.ollila@iki.fi> wrote: > A new configuration key 'new.ignore' is used to determine which > files and directories user wants not to be scanned as new mails. > > Mark the corresponding test as no longer broken. > > This work merges my previous attempts and Andreas Amann's work > in id:"ylp7hi23mw8.fsf@tyndall.ie" I marked this patch with 'needs-review' for consistency with the 2 other patches. No code changes to the previous version. Tomi ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v6 3/3] NEWS: add news section for new.ignore 2012-02-06 9:28 ` [PATCH v6 1/3] test: add tests wrt ignoring user-specified files and directories Tomi Ollila 2012-02-06 9:28 ` [PATCH v6 2/3] add support for user-specified files & directories to ignore Tomi Ollila @ 2012-02-06 9:28 ` Tomi Ollila 2012-02-14 19:18 ` Austin Clements 2012-02-13 8:20 ` [PATCH v6 1/3] test: add tests wrt ignoring user-specified files and directories Tomi Ollila 2012-02-14 19:18 ` Austin Clements 3 siblings, 1 reply; 58+ messages in thread From: Tomi Ollila @ 2012-02-06 9:28 UTC (permalink / raw) To: notmuch; +Cc: Tomi Ollila Added NEWS section 'Mail store folder/file ignore'. --- NEWS | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/NEWS b/NEWS index 5c5b645..59da584 100644 --- a/NEWS +++ b/NEWS @@ -29,6 +29,12 @@ Tag exclusion notmuch config set search.exclude_tags deleted spam +Mail store folder/file ignore + + New configuration option `new.ignore` is used to inform notmuch about + folders and files that are not mail files or contain material that is + not desired to be known by notmuch. + Emacs Interface --------------- -- 1.7.6.5 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: [PATCH v6 3/3] NEWS: add news section for new.ignore 2012-02-06 9:28 ` [PATCH v6 3/3] NEWS: add news section for new.ignore Tomi Ollila @ 2012-02-14 19:18 ` Austin Clements 0 siblings, 0 replies; 58+ messages in thread From: Austin Clements @ 2012-02-14 19:18 UTC (permalink / raw) To: Tomi Ollila, notmuch; +Cc: Tomi Ollila On Mon, 6 Feb 2012 11:28:25 +0200, Tomi Ollila <tomi.ollila@iki.fi> wrote: > Added NEWS section 'Mail store folder/file ignore'. > --- > NEWS | 6 ++++++ > 1 files changed, 6 insertions(+), 0 deletions(-) > > diff --git a/NEWS b/NEWS > index 5c5b645..59da584 100644 > --- a/NEWS > +++ b/NEWS > @@ -29,6 +29,12 @@ Tag exclusion > > notmuch config set search.exclude_tags deleted spam > > +Mail store folder/file ignore > + > + New configuration option `new.ignore` is used to inform notmuch about > + folders and files that are not mail files or contain material that is > + not desired to be known by notmuch. > + This is a bit unwieldy. How about something based on the config file comment? A new configuration option, `new.ignore`, lets users specify a ;-separated list of file and directory names that will not be searched for messages by "notmuch new". Plus, this way it's not so bad that we can't upgrade an existing config file comment. > Emacs Interface > --------------- > > -- > 1.7.6.5 > > _______________________________________________ > notmuch mailing list > notmuch@notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch > ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v6 1/3] test: add tests wrt ignoring user-specified files and directories 2012-02-06 9:28 ` [PATCH v6 1/3] test: add tests wrt ignoring user-specified files and directories Tomi Ollila 2012-02-06 9:28 ` [PATCH v6 2/3] add support for user-specified files & directories to ignore Tomi Ollila 2012-02-06 9:28 ` [PATCH v6 3/3] NEWS: add news section for new.ignore Tomi Ollila @ 2012-02-13 8:20 ` Tomi Ollila 2012-02-14 19:20 ` Austin Clements 2012-02-14 19:18 ` Austin Clements 3 siblings, 1 reply; 58+ messages in thread From: Tomi Ollila @ 2012-02-13 8:20 UTC (permalink / raw) To: notmuch Those interested in this patch set please check lates changes. The test patch (1/3) has been slighty modified from Pieter's version and NEWS patch (3/3) is new. The actual functionality in patch 2/3 is exactly the same as in previous version. This applies cleanly in top of current master ( a5674c21584a32a4f8a8a3e9ea3c3576f772e744 ) pushed Sun 2012-02-12. Tomi ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v6 1/3] test: add tests wrt ignoring user-specified files and directories 2012-02-13 8:20 ` [PATCH v6 1/3] test: add tests wrt ignoring user-specified files and directories Tomi Ollila @ 2012-02-14 19:20 ` Austin Clements 0 siblings, 0 replies; 58+ messages in thread From: Austin Clements @ 2012-02-14 19:20 UTC (permalink / raw) To: Tomi Ollila, notmuch On Mon, 13 Feb 2012 10:20:28 +0200, Tomi Ollila <tomi.ollila@iki.fi> wrote: > Those interested in this patch set please check lates changes. > The test patch (1/3) has been slighty modified from Pieter's > version and NEWS patch (3/3) is new. The actual functionality > in patch 2/3 is exactly the same as in previous version. > > This applies cleanly in top of current master > ( a5674c21584a32a4f8a8a3e9ea3c3576f772e744 ) pushed Sun 2012-02-12. This series LGTM other than the two minor wording changes I just sent out. ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v6 1/3] test: add tests wrt ignoring user-specified files and directories 2012-02-06 9:28 ` [PATCH v6 1/3] test: add tests wrt ignoring user-specified files and directories Tomi Ollila ` (2 preceding siblings ...) 2012-02-13 8:20 ` [PATCH v6 1/3] test: add tests wrt ignoring user-specified files and directories Tomi Ollila @ 2012-02-14 19:18 ` Austin Clements 3 siblings, 0 replies; 58+ messages in thread From: Austin Clements @ 2012-02-14 19:18 UTC (permalink / raw) To: Tomi Ollila, notmuch; +Cc: Tomi Ollila On Mon, 6 Feb 2012 11:28:23 +0200, Tomi Ollila <tomi.ollila@iki.fi> wrote: > Files and directories which are specified in 'new.ignore' in the > config file shouldn't be indexed nor reported by `notmuch new'. > > This is basically Pieter's work with Austin's comments addressed. > --- > test/new | 22 ++++++++++++++++++++++ > 1 files changed, 22 insertions(+), 0 deletions(-) > > diff --git a/test/new b/test/new > index 49f390d..5ce8811 100755 > --- a/test/new > +++ b/test/new > @@ -153,4 +153,26 @@ rm -rf "${MAIL_DIR}"/two > output=$(NOTMUCH_NEW) > test_expect_equal "$output" "No new mail. Removed 3 messages." > > +# This test depends that notmuch new has been run at least once. s/depends/requires/ > +test_begin_subtest "Skip and report non-mail files" > +generate_message > +mkdir -p "${MAIL_DIR}"/.git && touch "${MAIL_DIR}"/.git/config > +touch "${MAIL_DIR}"/ignored_file > +touch "${MAIL_DIR}"/.ignored_hidden_file > +output=$(NOTMUCH_NEW 2>&1) > +test_expect_equal "$output" \ > +"Note: Ignoring non-mail file: ${MAIL_DIR}/.git/config > +Note: Ignoring non-mail file: ${MAIL_DIR}/.ignored_hidden_file > +Note: Ignoring non-mail file: ${MAIL_DIR}/ignored_file > +Added 1 new message to the database." > + > +test_begin_subtest "Ignore files and directories specified in new.ignore" > +test_subtest_known_broken > +generate_message > +notmuch config set new.ignore .git ignored_file .ignored_hidden_file > +touch "${MAIL_DIR}"/.git # change .git's mtime for notmuch new to rescan. > +output=$(NOTMUCH_NEW 2>&1) > +test_expect_equal "$output" "Added 1 new message to the database." > + > + > test_done > -- > 1.7.6.5 > > _______________________________________________ > notmuch mailing list > notmuch@notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch > ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v7 0/3] NEWS and test comment adjustments 2011-09-13 21:32 [PATCH 0/3] Configuration file option to exclude files/directories tomi.ollila ` (5 preceding siblings ...) 2012-02-06 9:28 ` [PATCH v6 1/3] test: add tests wrt ignoring user-specified files and directories Tomi Ollila @ 2012-02-15 9:17 ` Tomi Ollila 2012-02-15 9:17 ` [PATCH v7 1/3] test: add tests wrt ignoring user-specified files and directories Tomi Ollila ` (3 more replies) 6 siblings, 4 replies; 58+ messages in thread From: Tomi Ollila @ 2012-02-15 9:17 UTC (permalink / raw) To: notmuch This version of 'new.ignore' patch series addresses Austin's last comments in NEWS and test/new documentation parts. No functional changes. ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v7 1/3] test: add tests wrt ignoring user-specified files and directories 2012-02-15 9:17 ` [PATCH v7 0/3] NEWS and test comment adjustments Tomi Ollila @ 2012-02-15 9:17 ` Tomi Ollila 2012-02-15 9:17 ` [PATCH v7 2/3] add support for user-specified files & directories to ignore Tomi Ollila ` (2 subsequent siblings) 3 siblings, 0 replies; 58+ messages in thread From: Tomi Ollila @ 2012-02-15 9:17 UTC (permalink / raw) To: notmuch; +Cc: Tomi Ollila Files and directories which are specified in 'new.ignore' in the config file shouldn't be indexed nor reported by `notmuch new'. This is basically Pieter's work with Austin's comments addressed. --- test/new | 22 ++++++++++++++++++++++ 1 files changed, 22 insertions(+), 0 deletions(-) diff --git a/test/new b/test/new index 49f390d..e453684 100755 --- a/test/new +++ b/test/new @@ -153,4 +153,26 @@ rm -rf "${MAIL_DIR}"/two output=$(NOTMUCH_NEW) test_expect_equal "$output" "No new mail. Removed 3 messages." +# This test requires that notmuch new has been run at least once. +test_begin_subtest "Skip and report non-mail files" +generate_message +mkdir -p "${MAIL_DIR}"/.git && touch "${MAIL_DIR}"/.git/config +touch "${MAIL_DIR}"/ignored_file +touch "${MAIL_DIR}"/.ignored_hidden_file +output=$(NOTMUCH_NEW 2>&1) +test_expect_equal "$output" \ +"Note: Ignoring non-mail file: ${MAIL_DIR}/.git/config +Note: Ignoring non-mail file: ${MAIL_DIR}/.ignored_hidden_file +Note: Ignoring non-mail file: ${MAIL_DIR}/ignored_file +Added 1 new message to the database." + +test_begin_subtest "Ignore files and directories specified in new.ignore" +test_subtest_known_broken +generate_message +notmuch config set new.ignore .git ignored_file .ignored_hidden_file +touch "${MAIL_DIR}"/.git # change .git's mtime for notmuch new to rescan. +output=$(NOTMUCH_NEW 2>&1) +test_expect_equal "$output" "Added 1 new message to the database." + + test_done -- 1.7.8.2 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* [PATCH v7 2/3] add support for user-specified files & directories to ignore 2012-02-15 9:17 ` [PATCH v7 0/3] NEWS and test comment adjustments Tomi Ollila 2012-02-15 9:17 ` [PATCH v7 1/3] test: add tests wrt ignoring user-specified files and directories Tomi Ollila @ 2012-02-15 9:17 ` Tomi Ollila 2012-02-15 9:17 ` [PATCH v7 3/3] NEWS: add news section for new.ignore Tomi Ollila 2012-02-17 12:13 ` [PATCH v7 0/3] NEWS and test comment adjustments David Bremner 3 siblings, 0 replies; 58+ messages in thread From: Tomi Ollila @ 2012-02-15 9:17 UTC (permalink / raw) To: notmuch; +Cc: Tomi Ollila A new configuration key 'new.ignore' is used to determine which files and directories user wants not to be scanned as new mails. Mark the corresponding test as no longer broken. This work merges my previous attempts and Andreas Amann's work in id:"ylp7hi23mw8.fsf@tyndall.ie" --- notmuch-client.h | 9 +++++++++ notmuch-config.c | 30 +++++++++++++++++++++++++++++- notmuch-new.c | 45 +++++++++++++++++++++++++++++++++------------ test/new | 1 - 4 files changed, 71 insertions(+), 14 deletions(-) diff --git a/notmuch-client.h b/notmuch-client.h index 60828aa..f4a62cc 100644 --- a/notmuch-client.h +++ b/notmuch-client.h @@ -250,6 +250,15 @@ notmuch_config_set_new_tags (notmuch_config_t *config, const char *new_tags[], size_t length); +const char ** +notmuch_config_get_new_ignore (notmuch_config_t *config, + size_t *length); + +void +notmuch_config_set_new_ignore (notmuch_config_t *config, + const char *new_ignore[], + size_t length); + notmuch_bool_t notmuch_config_get_maildir_synchronize_flags (notmuch_config_t *config); diff --git a/notmuch-config.c b/notmuch-config.c index a124e34..1f01128 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -44,7 +44,10 @@ static const char new_config_comment[] = " The following options are supported here:\n" "\n" "\ttags A list (separated by ';') of the tags that will be\n" - "\t added to all messages incorporated by \"notmuch new\".\n"; + "\t added to all messages incorporated by \"notmuch new\".\n" + "\n" + "\tignore A list (separated by ';') of file and directory names\n" + "\t that will not be searched for messages by \"notmuch new\".\n"; static const char user_config_comment[] = " User configuration\n" @@ -105,6 +108,8 @@ struct _notmuch_config { size_t user_other_email_length; const char **new_tags; size_t new_tags_length; + const char **new_ignore; + size_t new_ignore_length; notmuch_bool_t maildir_synchronize_flags; const char **search_exclude_tags; size_t search_exclude_tags_length; @@ -264,6 +269,8 @@ notmuch_config_open (void *ctx, config->user_other_email_length = 0; config->new_tags = NULL; config->new_tags_length = 0; + config->new_ignore = NULL; + config->new_ignore_length = 0; config->maildir_synchronize_flags = TRUE; config->search_exclude_tags = NULL; config->search_exclude_tags_length = 0; @@ -361,6 +368,10 @@ notmuch_config_open (void *ctx, notmuch_config_set_new_tags (config, tags, 2); } + if (notmuch_config_get_new_ignore (config, &tmp) == NULL) { + notmuch_config_set_new_ignore (config, NULL, 0); + } + if (notmuch_config_get_search_exclude_tags (config, &tmp) == NULL) { if (is_new) { const char *tags[] = { "deleted", "spam" }; @@ -609,6 +620,14 @@ notmuch_config_get_new_tags (notmuch_config_t *config, size_t *length) &(config->new_tags_length), length); } +const char ** +notmuch_config_get_new_ignore (notmuch_config_t *config, size_t *length) +{ + return _config_get_list (config, "new", "ignore", + &(config->new_ignore), + &(config->new_ignore_length), length); +} + void notmuch_config_set_user_other_email (notmuch_config_t *config, const char *list[], @@ -627,6 +646,15 @@ notmuch_config_set_new_tags (notmuch_config_t *config, &(config->new_tags)); } +void +notmuch_config_set_new_ignore (notmuch_config_t *config, + const char *list[], + size_t length) +{ + _config_set_list (config, "new", "ignore", list, length, + &(config->new_ignore)); +} + const char ** notmuch_config_get_search_exclude_tags (notmuch_config_t *config, size_t *length) { diff --git a/notmuch-new.c b/notmuch-new.c index 8dbebb3..4f13535 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -39,6 +39,8 @@ typedef struct { int verbose; const char **new_tags; size_t new_tags_length; + const char **new_ignore; + size_t new_ignore_length; int total_files; int processed_files; @@ -181,6 +183,20 @@ _entries_resemble_maildir (struct dirent **entries, int count) return 0; } +/* Test if the file/directory is to be ignored. + */ +static notmuch_bool_t +_entry_in_ignore_list (const char *entry, add_files_state_t *state) +{ + size_t i; + + for (i = 0; i < state->new_ignore_length; i++) + if (strcmp (entry, state->new_ignore[i]) == 0) + return TRUE; + + return FALSE; +} + /* Examine 'path' recursively as follows: * * o Ask the filesystem for the mtime of 'path' (fs_mtime) @@ -320,15 +336,15 @@ add_files_recursive (notmuch_database_t *notmuch, } /* Ignore special directories to avoid infinite recursion. - * Also ignore the .notmuch directory and any "tmp" directory - * that appears within a maildir. + * Also ignore the .notmuch directory, any "tmp" directory + * that appears within a maildir and files/directories + * the user has configured to be ignored. */ - /* XXX: Eventually we'll want more sophistication to let the - * user specify files to be ignored. */ 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 || + _entry_in_ignore_list (entry->d_name, state)) { continue; } @@ -369,6 +385,10 @@ add_files_recursive (notmuch_database_t *notmuch, entry = fs_entries[i]; + /* Ignore files & directories user has configured to be ignored */ + if (_entry_in_ignore_list (entry->d_name, state)) + continue; + /* Check if we've walked past any names in db_files or * db_subdirs. If so, these have been deleted. */ while (notmuch_filenames_valid (db_files) && @@ -650,7 +670,7 @@ add_files (notmuch_database_t *notmuch, * initialized to zero by the top-level caller before calling * count_files). */ static void -count_files (const char *path, int *count) +count_files (const char *path, int *count, add_files_state_t *state) { struct dirent *entry = NULL; char *next; @@ -672,13 +692,13 @@ count_files (const char *path, int *count) entry = fs_entries[i++]; /* Ignore special directories to avoid infinite recursion. - * Also ignore the .notmuch directory. + * Also ignore the .notmuch directory and files/directories + * the user has configured to be ignored. */ - /* XXX: Eventually we'll want more sophistication to let the - * user specify files to be ignored. */ if (strcmp (entry->d_name, ".") == 0 || strcmp (entry->d_name, "..") == 0 || - strcmp (entry->d_name, ".notmuch") == 0) + strcmp (entry->d_name, ".notmuch") == 0 || + _entry_in_ignore_list (entry->d_name, state)) { continue; } @@ -699,7 +719,7 @@ count_files (const char *path, int *count) fflush (stdout); } } else if (S_ISDIR (st.st_mode)) { - count_files (next, count); + count_files (next, count, state); } free (next); @@ -841,6 +861,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) return 1; add_files_state.new_tags = notmuch_config_get_new_tags (config, &add_files_state.new_tags_length); + add_files_state.new_ignore = notmuch_config_get_new_ignore (config, &add_files_state.new_ignore_length); add_files_state.synchronize_flags = notmuch_config_get_maildir_synchronize_flags (config); db_path = notmuch_config_get_database_path (config); @@ -856,7 +877,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) int count; count = 0; - count_files (db_path, &count); + count_files (db_path, &count, &add_files_state); if (interrupted) return 1; diff --git a/test/new b/test/new index e453684..79a6c97 100755 --- a/test/new +++ b/test/new @@ -167,7 +167,6 @@ Note: Ignoring non-mail file: ${MAIL_DIR}/ignored_file Added 1 new message to the database." test_begin_subtest "Ignore files and directories specified in new.ignore" -test_subtest_known_broken generate_message notmuch config set new.ignore .git ignored_file .ignored_hidden_file touch "${MAIL_DIR}"/.git # change .git's mtime for notmuch new to rescan. -- 1.7.8.2 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* [PATCH v7 3/3] NEWS: add news section for new.ignore 2012-02-15 9:17 ` [PATCH v7 0/3] NEWS and test comment adjustments Tomi Ollila 2012-02-15 9:17 ` [PATCH v7 1/3] test: add tests wrt ignoring user-specified files and directories Tomi Ollila 2012-02-15 9:17 ` [PATCH v7 2/3] add support for user-specified files & directories to ignore Tomi Ollila @ 2012-02-15 9:17 ` Tomi Ollila 2012-02-17 12:13 ` [PATCH v7 0/3] NEWS and test comment adjustments David Bremner 3 siblings, 0 replies; 58+ messages in thread From: Tomi Ollila @ 2012-02-15 9:17 UTC (permalink / raw) To: notmuch; +Cc: Tomi Ollila Added NEWS section 'Mail store folder/file ignore'. --- NEWS | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/NEWS b/NEWS index f449fba..e9abb86 100644 --- a/NEWS +++ b/NEWS @@ -29,6 +29,12 @@ Tag exclusion notmuch config set search.exclude_tags deleted spam +Mail store folder/file ignore + + A new configuration option, `new.ignore`, lets users specify a + ;-separated list of file and directory names that will not be + searched for messages by "notmuch new". + Emacs Interface --------------- -- 1.7.8.2 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: [PATCH v7 0/3] NEWS and test comment adjustments 2012-02-15 9:17 ` [PATCH v7 0/3] NEWS and test comment adjustments Tomi Ollila ` (2 preceding siblings ...) 2012-02-15 9:17 ` [PATCH v7 3/3] NEWS: add news section for new.ignore Tomi Ollila @ 2012-02-17 12:13 ` David Bremner 2012-02-19 20:47 ` Pieter Praet 3 siblings, 1 reply; 58+ messages in thread From: David Bremner @ 2012-02-17 12:13 UTC (permalink / raw) To: Tomi Ollila, notmuch On Wed, 15 Feb 2012 11:17:29 +0200, Tomi Ollila <tomi.ollila@iki.fi> wrote: > This version of 'new.ignore' patch series addresses Austin's last > comments in NEWS and test/new documentation parts. > Pushed, d ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v7 0/3] NEWS and test comment adjustments 2012-02-17 12:13 ` [PATCH v7 0/3] NEWS and test comment adjustments David Bremner @ 2012-02-19 20:47 ` Pieter Praet 2012-02-19 20:47 ` [PATCH 1/6] cli: update 'new.ignore' config file comment wrt file/directory matching Pieter Praet ` (5 more replies) 0 siblings, 6 replies; 58+ messages in thread From: Pieter Praet @ 2012-02-19 20:47 UTC (permalink / raw) To: David Bremner, Tomi Ollila; +Cc: Notmuch Mail Very happy to see this go into mainline! Thanks all! We should make it very clear, though, that *every* file/directory that matches one of the values in 'new.ignore' will be ignored. Patches follow. Peace ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH 1/6] cli: update 'new.ignore' config file comment wrt file/directory matching 2012-02-19 20:47 ` Pieter Praet @ 2012-02-19 20:47 ` Pieter Praet 2012-02-28 2:46 ` David Bremner 2012-02-19 20:47 ` [PATCH 2/6] NEWS: sync 'new.ignore' entry with its comment in notmuch-config.c Pieter Praet ` (4 subsequent siblings) 5 siblings, 1 reply; 58+ messages in thread From: Pieter Praet @ 2012-02-19 20:47 UTC (permalink / raw) To: David Bremner, Tomi Ollila; +Cc: Notmuch Mail --- notmuch-config.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/notmuch-config.c b/notmuch-config.c index 1f01128..e9b2750 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -47,7 +47,10 @@ static const char new_config_comment[] = "\t added to all messages incorporated by \"notmuch new\".\n" "\n" "\tignore A list (separated by ';') of file and directory names\n" - "\t that will not be searched for messages by \"notmuch new\".\n"; + "\t that will not be searched for messages by \"notmuch new\".\n" + "\n" + "\t NOTE: *Every* file/directory that goes by one of those names will\n" + "\t be ignored, independent of its depth/location in the mail store.\n"; static const char user_config_comment[] = " User configuration\n" -- 1.7.8.1 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: [PATCH 1/6] cli: update 'new.ignore' config file comment wrt file/directory matching 2012-02-19 20:47 ` [PATCH 1/6] cli: update 'new.ignore' config file comment wrt file/directory matching Pieter Praet @ 2012-02-28 2:46 ` David Bremner 0 siblings, 0 replies; 58+ messages in thread From: David Bremner @ 2012-02-28 2:46 UTC (permalink / raw) To: Pieter Praet; +Cc: Notmuch Mail On Sun, 19 Feb 2012 21:47:51 +0100, Pieter Praet <pieter@praet.org> wrote: > --- > notmuch-config.c | 5 ++++- > 1 files changed, 4 insertions(+), 1 deletions(-) pushed. ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH 2/6] NEWS: sync 'new.ignore' entry with its comment in notmuch-config.c 2012-02-19 20:47 ` Pieter Praet 2012-02-19 20:47 ` [PATCH 1/6] cli: update 'new.ignore' config file comment wrt file/directory matching Pieter Praet @ 2012-02-19 20:47 ` Pieter Praet 2012-02-28 2:46 ` David Bremner 2012-02-19 20:47 ` [PATCH 3/6] cli: add '--debug' option to 'notmuch new' Pieter Praet ` (3 subsequent siblings) 5 siblings, 1 reply; 58+ messages in thread From: Pieter Praet @ 2012-02-19 20:47 UTC (permalink / raw) To: David Bremner, Tomi Ollila; +Cc: Notmuch Mail See previous commit. --- NEWS | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/NEWS b/NEWS index e9abb86..833ab5f 100644 --- a/NEWS +++ b/NEWS @@ -35,6 +35,9 @@ Mail store folder/file ignore ;-separated list of file and directory names that will not be searched for messages by "notmuch new". + NOTE: *Every* file/directory that goes by one of those names will + be ignored, independent of its depth/location in the mail store. + Emacs Interface --------------- -- 1.7.8.1 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: [PATCH 2/6] NEWS: sync 'new.ignore' entry with its comment in notmuch-config.c 2012-02-19 20:47 ` [PATCH 2/6] NEWS: sync 'new.ignore' entry with its comment in notmuch-config.c Pieter Praet @ 2012-02-28 2:46 ` David Bremner 0 siblings, 0 replies; 58+ messages in thread From: David Bremner @ 2012-02-28 2:46 UTC (permalink / raw) To: Pieter Praet; +Cc: Notmuch Mail On Sun, 19 Feb 2012 21:47:52 +0100, Pieter Praet <pieter@praet.org> wrote: > See previous commit. Pushed. d ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH 3/6] cli: add '--debug' option to 'notmuch new' 2012-02-19 20:47 ` Pieter Praet 2012-02-19 20:47 ` [PATCH 1/6] cli: update 'new.ignore' config file comment wrt file/directory matching Pieter Praet 2012-02-19 20:47 ` [PATCH 2/6] NEWS: sync 'new.ignore' entry with its comment in notmuch-config.c Pieter Praet @ 2012-02-19 20:47 ` Pieter Praet 2012-02-19 20:47 ` [PATCH 4/6] cli: notmuch new: optionally output debug information when ignoring files/directories Pieter Praet ` (2 subsequent siblings) 5 siblings, 0 replies; 58+ messages in thread From: Pieter Praet @ 2012-02-19 20:47 UTC (permalink / raw) To: David Bremner, Tomi Ollila; +Cc: Notmuch Mail This will be used in later patches to test the 'new.ignore' config option more thoroughly. --- notmuch-new.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/notmuch-new.c b/notmuch-new.c index 4f13535..ca12003 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -37,6 +37,7 @@ typedef struct _filename_list { typedef struct { int output_is_a_tty; int verbose; + int debug; const char **new_tags; size_t new_tags_length; const char **new_ignore; @@ -842,6 +843,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) notmuch_bool_t run_hooks = TRUE; add_files_state.verbose = 0; + add_files_state.debug = 0; add_files_state.output_is_a_tty = isatty (fileno (stdout)); argc--; argv++; /* skip subcommand argument */ @@ -849,6 +851,8 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) for (i = 0; i < argc && argv[i][0] == '-'; i++) { if (STRNCMP_LITERAL (argv[i], "--verbose") == 0) { add_files_state.verbose = 1; + } else if (strcmp (argv[i], "--debug") == 0) { + add_files_state.debug = 1; } else if (strcmp (argv[i], "--no-hooks") == 0) { run_hooks = FALSE; } else { -- 1.7.8.1 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* [PATCH 4/6] cli: notmuch new: optionally output debug information when ignoring files/directories 2012-02-19 20:47 ` Pieter Praet ` (2 preceding siblings ...) 2012-02-19 20:47 ` [PATCH 3/6] cli: add '--debug' option to 'notmuch new' Pieter Praet @ 2012-02-19 20:47 ` Pieter Praet 2012-02-19 20:47 ` [PATCH 5/6] test-lib.sh: pass 'NOTMUCH_NEW's args down to 'notmuch new' Pieter Praet 2012-02-19 20:47 ` [PATCH 6/6] test: another test wrt ignoring user-specified files and directories Pieter Praet 5 siblings, 0 replies; 58+ messages in thread From: Pieter Praet @ 2012-02-19 20:47 UTC (permalink / raw) To: David Bremner, Tomi Ollila; +Cc: Notmuch Mail When running 'notmuch new' with the '--debug' option, output debug information regarding explicitly ignored files and directories. --- notmuch-new.c | 15 ++++++++++++++- 1 files changed, 14 insertions(+), 1 deletions(-) diff --git a/notmuch-new.c b/notmuch-new.c index ca12003..6f34da1 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -347,6 +347,10 @@ add_files_recursive (notmuch_database_t *notmuch, strcmp (entry->d_name, ".notmuch") == 0 || _entry_in_ignore_list (entry->d_name, state)) { + if (_entry_in_ignore_list (entry->d_name, state) && state->debug) + printf ("(D) add_files_recursive, pass 1: explicitly ignoring %s/%s\n", + path, + entry->d_name); continue; } @@ -387,8 +391,13 @@ add_files_recursive (notmuch_database_t *notmuch, entry = fs_entries[i]; /* Ignore files & directories user has configured to be ignored */ - if (_entry_in_ignore_list (entry->d_name, state)) + if (_entry_in_ignore_list (entry->d_name, state)) { + if (state->debug) + printf ("(D) add_files_recursive, pass 2: explicitly ignoring %s/%s\n", + path, + entry->d_name); continue; + } /* Check if we've walked past any names in db_files or * db_subdirs. If so, these have been deleted. */ @@ -701,6 +710,10 @@ count_files (const char *path, int *count, add_files_state_t *state) strcmp (entry->d_name, ".notmuch") == 0 || _entry_in_ignore_list (entry->d_name, state)) { + if (_entry_in_ignore_list (entry->d_name, state) && state->debug) + printf ("(D) count_files: explicitly ignoring %s/%s\n", + path, + entry->d_name); continue; } -- 1.7.8.1 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* [PATCH 5/6] test-lib.sh: pass 'NOTMUCH_NEW's args down to 'notmuch new' 2012-02-19 20:47 ` Pieter Praet ` (3 preceding siblings ...) 2012-02-19 20:47 ` [PATCH 4/6] cli: notmuch new: optionally output debug information when ignoring files/directories Pieter Praet @ 2012-02-19 20:47 ` Pieter Praet 2012-02-19 20:47 ` [PATCH 6/6] test: another test wrt ignoring user-specified files and directories Pieter Praet 5 siblings, 0 replies; 58+ messages in thread From: Pieter Praet @ 2012-02-19 20:47 UTC (permalink / raw) To: David Bremner, Tomi Ollila; +Cc: Notmuch Mail Obviates the need to create a 'NOTMUCH_NEW' clone which runs 'notmuch new --debug'. This will be used in a later patch. Doesn't cause any issues for other tests. --- test/test-lib.sh | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/test/test-lib.sh b/test/test-lib.sh index 0174e93..ade7000 100644 --- a/test/test-lib.sh +++ b/test/test-lib.sh @@ -534,7 +534,7 @@ test_emacs_expect_t () { NOTMUCH_NEW () { - notmuch new | grep -v -E -e '^Processed [0-9]*( total)? file|Found [0-9]* total file' + notmuch new "${@}" | grep -v -E -e '^Processed [0-9]*( total)? file|Found [0-9]* total file' } notmuch_search_sanitize () -- 1.7.8.1 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* [PATCH 6/6] test: another test wrt ignoring user-specified files and directories 2012-02-19 20:47 ` Pieter Praet ` (4 preceding siblings ...) 2012-02-19 20:47 ` [PATCH 5/6] test-lib.sh: pass 'NOTMUCH_NEW's args down to 'notmuch new' Pieter Praet @ 2012-02-19 20:47 ` Pieter Praet 2012-08-31 21:13 ` David Bremner 5 siblings, 1 reply; 58+ messages in thread From: Pieter Praet @ 2012-02-19 20:47 UTC (permalink / raw) To: David Bremner, Tomi Ollila; +Cc: Notmuch Mail Demonstrates that *every* file/directory which matches one of the values in 'new.ignore' will be ignored, independent of its depth/location in the mail store. --- test/new | 19 +++++++++++++++++++ 1 files changed, 19 insertions(+), 0 deletions(-) diff --git a/test/new b/test/new index 79a6c97..a7b7330 100755 --- a/test/new +++ b/test/new @@ -173,5 +173,24 @@ touch "${MAIL_DIR}"/.git # change .git's mtime for notmuch new to rescan. output=$(NOTMUCH_NEW 2>&1) test_expect_equal "$output" "Added 1 new message to the database." +test_begin_subtest "Ignore files and directories specified in new.ignore (multiple occurrences)" +notmuch config set new.ignore .git ignored_file .ignored_hidden_file +touch "${MAIL_DIR}"/.git # change .git's mtime for notmuch new to rescan. +mkdir -p "${MAIL_DIR}"/one/two/three/.git +notmuch new > /dev/null # ensure that files/folders will be printed in ASCII order. +touch "${MAIL_DIR}"/{one,one/two,one/two/three}/ignored_file +output=$(NOTMUCH_NEW --debug 2>&1) +test_expect_equal "$output" \ +"(D) add_files_recursive, pass 1: explicitly ignoring /dev/shm/notmuch/tmp.new/mail/.git +(D) add_files_recursive, pass 1: explicitly ignoring /dev/shm/notmuch/tmp.new/mail/one/two/three/.git +(D) add_files_recursive, pass 2: explicitly ignoring /dev/shm/notmuch/tmp.new/mail/one/two/three/.git +(D) add_files_recursive, pass 2: explicitly ignoring /dev/shm/notmuch/tmp.new/mail/one/two/three/ignored_file +(D) add_files_recursive, pass 2: explicitly ignoring /dev/shm/notmuch/tmp.new/mail/one/two/ignored_file +(D) add_files_recursive, pass 2: explicitly ignoring /dev/shm/notmuch/tmp.new/mail/one/ignored_file +(D) add_files_recursive, pass 2: explicitly ignoring /dev/shm/notmuch/tmp.new/mail/.git +(D) add_files_recursive, pass 2: explicitly ignoring /dev/shm/notmuch/tmp.new/mail/.ignored_hidden_file +(D) add_files_recursive, pass 2: explicitly ignoring /dev/shm/notmuch/tmp.new/mail/ignored_file +No new mail." + test_done -- 1.7.8.1 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: [PATCH 6/6] test: another test wrt ignoring user-specified files and directories 2012-02-19 20:47 ` [PATCH 6/6] test: another test wrt ignoring user-specified files and directories Pieter Praet @ 2012-08-31 21:13 ` David Bremner 2012-10-12 19:32 ` [PATCH] " Ethan Glasser-Camp 0 siblings, 1 reply; 58+ messages in thread From: David Bremner @ 2012-08-31 21:13 UTC (permalink / raw) To: Pieter Praet; +Cc: Notmuch Mail Pieter Praet <pieter@praet.org> writes: > Demonstrates that *every* file/directory which matches one of the values > in 'new.ignore' will be ignored, independent of its depth/location in > the mail store. > --- This test fails, apparently because it hard codes the test file paths. Otherwise the remainder of the series looks fine to me. d ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH] test: another test wrt ignoring user-specified files and directories 2012-08-31 21:13 ` David Bremner @ 2012-10-12 19:32 ` Ethan Glasser-Camp 2012-10-20 20:42 ` David Bremner 0 siblings, 1 reply; 58+ messages in thread From: Ethan Glasser-Camp @ 2012-10-12 19:32 UTC (permalink / raw) To: notmuch; +Cc: Ethan Glasser-Camp, Pieter Praet From: Pieter Praet <pieter@praet.org> Demonstrates that *every* file/directory which matches one of the values in 'new.ignore' will be ignored, independent of its depth/location in the mail store. Signed-off-by: Ethan Glasser-Camp <ethan@betacantrips.com> --- This is the trivial modification of Pieter's patch that makes it work no matter where your test directory is. test/new | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test/new b/test/new index cab7c01..cc2af72 100755 --- a/test/new +++ b/test/new @@ -183,5 +183,24 @@ touch "${MAIL_DIR}"/.git # change .git's mtime for notmuch new to rescan. output=$(NOTMUCH_NEW 2>&1) test_expect_equal "$output" "Added 1 new message to the database." +test_begin_subtest "Ignore files and directories specified in new.ignore (multiple occurrences)" +notmuch config set new.ignore .git ignored_file .ignored_hidden_file +touch "${MAIL_DIR}"/.git # change .git's mtime for notmuch new to rescan. +mkdir -p "${MAIL_DIR}"/one/two/three/.git +notmuch new > /dev/null # ensure that files/folders will be printed in ASCII order. +touch "${MAIL_DIR}"/{one,one/two,one/two/three}/ignored_file +output=$(NOTMUCH_NEW --debug 2>&1) +test_expect_equal "$output" \ +"(D) add_files_recursive, pass 1: explicitly ignoring ${MAIL_DIR}/.git +(D) add_files_recursive, pass 1: explicitly ignoring ${MAIL_DIR}/one/two/three/.git +(D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/one/two/three/.git +(D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/one/two/three/ignored_file +(D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/one/two/ignored_file +(D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/one/ignored_file +(D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/.git +(D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/.ignored_hidden_file +(D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/ignored_file +No new mail." + test_done -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 58+ messages in thread
* Re: [PATCH] test: another test wrt ignoring user-specified files and directories 2012-10-12 19:32 ` [PATCH] " Ethan Glasser-Camp @ 2012-10-20 20:42 ` David Bremner 0 siblings, 0 replies; 58+ messages in thread From: David Bremner @ 2012-10-20 20:42 UTC (permalink / raw) To: Ethan Glasser-Camp, notmuch; +Cc: Pieter Praet, Ethan Glasser-Camp Ethan Glasser-Camp <ethan.glasser.camp@gmail.com> writes: > This is the trivial modification of Pieter's patch that makes it work > no matter where your test directory is. pushed patches 3 though 6, d And yes, _this_ is the series where I used Ethan's edited patch. ^ permalink raw reply [flat|nested] 58+ messages in thread
end of thread, other threads:[~2012-10-20 20:42 UTC | newest] Thread overview: 58+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-09-13 21:32 [PATCH 0/3] Configuration file option to exclude files/directories tomi.ollila 2011-09-13 21:32 ` [PATCH 1/3] added function notmuch_talloc_g_key_file_get_string_list() tomi.ollila 2011-09-13 21:32 ` [PATCH 2/3] Made notmuch_config_get_new_tags() use notmuch_talloc_g_key_file_get_string_list() tomi.ollila 2011-09-13 21:32 ` [PATCH 3/3] added support for user-specified directories to exclude tomi.ollila 2011-12-07 23:51 ` [PATCH 0/3] Configuration file option to exclude files/directories David Bremner 2011-12-08 0:24 ` Tom Prince 2011-12-08 9:05 ` Tomi Ollila 2012-01-25 0:46 ` Pieter Praet 2012-01-26 10:11 ` [PATCH 1/2] moved _notmuch_get_list () and _notmuch_set_list () up in file Tomi Ollila 2012-01-26 10:11 ` [PATCH 2/2] added support for user-specified directories to exclude Tomi Ollila 2012-01-26 13:11 ` Jani Nikula 2012-01-27 10:41 ` Tomi Ollila 2012-01-27 22:14 ` Austin Clements 2012-01-28 14:16 ` Fabio Zanini 2012-01-27 22:50 ` Austin Clements 2012-01-26 13:03 ` [PATCH 1/2] moved _notmuch_get_list () and _notmuch_set_list () up in file Jani Nikula 2012-01-27 10:42 ` Tomi Ollila 2012-01-27 18:18 ` Ethan Glasser-Camp 2012-01-30 10:31 ` [PATCH] moved _config_(get|set)_list () functions earlyer in the file Tomi Ollila 2012-01-30 15:06 ` Austin Clements 2012-01-31 3:28 ` David Bremner 2012-01-27 10:59 ` [PATCH] moved _notmuch_(get|set)_list " Tomi Ollila 2012-01-27 22:15 ` Austin Clements 2012-01-25 6:28 ` [PATCH 0/3] Configuration file option to exclude files/directories David Edmondson 2012-02-01 14:12 ` [PATCH] test: add tests wrt ignoring user-specified files and directories Pieter Praet 2012-02-03 12:14 ` Tomi Ollila 2012-02-03 22:39 ` Austin Clements 2012-02-03 22:44 ` Austin Clements 2012-02-19 20:43 ` Pieter Praet 2012-01-31 16:28 ` [PATCH] added support for user-specified files & directories to ignore Tomi Ollila 2012-02-01 14:25 ` Pieter Praet 2012-02-01 14:49 ` Jani Nikula 2012-02-01 16:30 ` Austin Clements 2012-02-06 9:28 ` [PATCH v6 1/3] test: add tests wrt ignoring user-specified files and directories Tomi Ollila 2012-02-06 9:28 ` [PATCH v6 2/3] add support for user-specified files & directories to ignore Tomi Ollila 2012-02-06 9:50 ` Tomi Ollila 2012-02-06 9:28 ` [PATCH v6 3/3] NEWS: add news section for new.ignore Tomi Ollila 2012-02-14 19:18 ` Austin Clements 2012-02-13 8:20 ` [PATCH v6 1/3] test: add tests wrt ignoring user-specified files and directories Tomi Ollila 2012-02-14 19:20 ` Austin Clements 2012-02-14 19:18 ` Austin Clements 2012-02-15 9:17 ` [PATCH v7 0/3] NEWS and test comment adjustments Tomi Ollila 2012-02-15 9:17 ` [PATCH v7 1/3] test: add tests wrt ignoring user-specified files and directories Tomi Ollila 2012-02-15 9:17 ` [PATCH v7 2/3] add support for user-specified files & directories to ignore Tomi Ollila 2012-02-15 9:17 ` [PATCH v7 3/3] NEWS: add news section for new.ignore Tomi Ollila 2012-02-17 12:13 ` [PATCH v7 0/3] NEWS and test comment adjustments David Bremner 2012-02-19 20:47 ` Pieter Praet 2012-02-19 20:47 ` [PATCH 1/6] cli: update 'new.ignore' config file comment wrt file/directory matching Pieter Praet 2012-02-28 2:46 ` David Bremner 2012-02-19 20:47 ` [PATCH 2/6] NEWS: sync 'new.ignore' entry with its comment in notmuch-config.c Pieter Praet 2012-02-28 2:46 ` David Bremner 2012-02-19 20:47 ` [PATCH 3/6] cli: add '--debug' option to 'notmuch new' Pieter Praet 2012-02-19 20:47 ` [PATCH 4/6] cli: notmuch new: optionally output debug information when ignoring files/directories Pieter Praet 2012-02-19 20:47 ` [PATCH 5/6] test-lib.sh: pass 'NOTMUCH_NEW's args down to 'notmuch new' Pieter Praet 2012-02-19 20:47 ` [PATCH 6/6] test: another test wrt ignoring user-specified files and directories Pieter Praet 2012-08-31 21:13 ` David Bremner 2012-10-12 19:32 ` [PATCH] " Ethan Glasser-Camp 2012-10-20 20:42 ` David Bremner
Code repositories for project(s) associated with this public inbox https://yhetil.org/notmuch.git/ This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).