unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: Jani Nikula <jani@nikula.org>
To: notmuch@notmuchmail.org
Subject: [RFC 3/5] cli: support shell globbing patterns in new.ignore
Date: Tue,  3 Nov 2015 21:49:31 +0200	[thread overview]
Message-ID: <51db8c12299cb1765d346fa2c93c6c95abb92613.1446579858.git.jani@nikula.org> (raw)
In-Reply-To: <cover.1446579858.git.jani@nikula.org>
In-Reply-To: <cover.1446579858.git.jani@nikula.org>

Keep the existing strcmp on the basename for backwards compatibility,
and additionally use the new.ignore entries as fnmatch(3) patterns on
the absolute filename. Note that it's not enough to add e.g. "foo*bar"
to the list; you will need to do "*/foo*bar" to match the path also.
---
 notmuch-new.c | 33 +++++++++++++++++++++++++--------
 1 file changed, 25 insertions(+), 8 deletions(-)

diff --git a/notmuch-new.c b/notmuch-new.c
index da1d1be2ed3b..d06f9c906fc6 100644
--- a/notmuch-new.c
+++ b/notmuch-new.c
@@ -22,6 +22,7 @@
 #include "tag-util.h"
 
 #include <unistd.h>
+#include <fnmatch.h>
 
 typedef struct _filename_node {
     char *filename;
@@ -236,15 +237,31 @@ _entries_resemble_maildir (const char *path, struct dirent **entries, int count)
 /* 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)
+_entry_in_ignore_list (const char *path, const char *entry,
+		       add_files_state_t *state)
 {
+    char *abspath;
+    notmuch_bool_t ret = FALSE;
     size_t i;
 
-    for (i = 0; i < state->new_ignore_length; i++)
-	if (strcmp (entry, state->new_ignore[i]) == 0)
-	    return TRUE;
+    if (state->new_ignore_length == 0)
+	return FALSE;
+
+    abspath = talloc_asprintf (NULL, "%s/%s", path, entry);
+    if (! abspath)
+	return FALSE;
 
-    return FALSE;
+    for (i = 0; i < state->new_ignore_length; i++) {
+	if (strcmp (entry, state->new_ignore[i]) == 0 ||
+	    fnmatch (state->new_ignore[i], abspath, 0) == 0) {
+	    ret = TRUE;
+	    break;
+	}
+    }
+
+    talloc_free (abspath);
+
+    return ret;
 }
 
 /* Add a single file to the database. */
@@ -443,7 +460,7 @@ add_files (notmuch_database_t *notmuch,
 	 * and because we don't care if dirent_type fails on entries
 	 * that are explicitly ignored.
 	 */
-	if (_entry_in_ignore_list (entry->d_name, state)) {
+	if (_entry_in_ignore_list (path, entry->d_name, state)) {
 	    if (state->debug)
 		printf ("(D) add_files, pass 1: explicitly ignoring %s/%s\n",
 			path, entry->d_name);
@@ -511,7 +528,7 @@ add_files (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 (path, entry->d_name, state)) {
 	    if (state->debug)
 		printf ("(D) add_files, pass 2: explicitly ignoring %s/%s\n",
 			path, entry->d_name);
@@ -744,7 +761,7 @@ count_files (const char *path, int *count, add_files_state_t *state)
 	/* Ignore any files/directories the user has configured to be
 	 * ignored
 	 */
-	if (_entry_in_ignore_list (entry->d_name, state)) {
+	if (_entry_in_ignore_list (path, entry->d_name, state)) {
 	    if (state->debug)
 		printf ("(D) count_files: explicitly ignoring %s/%s\n",
 			path, entry->d_name);
-- 
2.1.4

  parent reply	other threads:[~2015-11-03 19:50 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-03 19:49 [RFC 0/5] globbing on new.ignore etc Jani Nikula
2015-11-03 19:49 ` [RFC 1/5] cli: fix function name in notmuch new debug logging Jani Nikula
2015-12-30 15:31   ` David Bremner
2015-11-03 19:49 ` [RFC 2/5] cli: don't call _entry_in_ignore_list twice in count files debug Jani Nikula
2016-04-09 23:56   ` David Bremner
2015-11-03 19:49 ` Jani Nikula [this message]
2016-04-10  0:37   ` [RFC 3/5] cli: support shell globbing patterns in new.ignore David Bremner
2017-03-11 14:35   ` David Bremner
2015-11-03 19:49 ` [RFC 4/5] cli: add notmuch config append command to append to string list configs Jani Nikula
2015-11-03 19:49 ` [RFC 5/5] cli: print number of ignored non-mails encountered in notmuch new scan Jani Nikula
2017-03-11 14:42   ` David Bremner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51db8c12299cb1765d346fa2c93c6c95abb92613.1446579858.git.jani@nikula.org \
    --to=jani@nikula.org \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).