]> git.notmuchmail.org Git - notmuch/commitdiff
lib: add NOTMUCH_EXCLUDE_FLAG to notmuch_exclude_t
authorMark Walters <markwalters1009@gmail.com>
Mon, 13 May 2013 15:10:51 +0000 (16:10 +0100)
committerDavid Bremner <bremner@debian.org>
Tue, 25 Jun 2013 05:53:16 +0000 (22:53 -0700)
Add NOTMUCH_EXCLUDE_FLAG to notmuch_exclude_t so that it can
cover all four values of search --exclude in the cli.

Previously the way to avoid any message being marked excluded was to
pass in an empty list of excluded tags: since we now have an explicit
option we might as well honour it.

The enum is in a slightly strange order as the existing FALSE/TRUE
options correspond to the new
NOTMUCH_EXCLUDE_FLAG/NOTMUCH_EXCLUDE_TRUE options so this means we do
not need to bump the version number.

Indeed, an example of this is that the cli count and show still use
FALSE/TRUE and still work.

lib/notmuch.h
lib/query.cc
lib/thread.cc
notmuch-search.c

index 27b43ff6dc65988363ef8504bb98e1da7926d7c6..73c85a41816c6386ad97d0f347ec6d06bafc0f71 100644 (file)
@@ -500,10 +500,15 @@ typedef enum {
 const char *
 notmuch_query_get_query_string (notmuch_query_t *query);
 
-/* Exclude values for notmuch_query_set_omit_excluded */
+/* Exclude values for notmuch_query_set_omit_excluded. The strange
+ * order is to maintain backward compatibility: the old FALSE/TRUE
+ * options correspond to the new
+ * NOTMUCH_EXCLUDE_FLAG/NOTMUCH_EXCLUDE_TRUE options.
+ */
 typedef enum {
-    NOTMUCH_EXCLUDE_FALSE,
+    NOTMUCH_EXCLUDE_FLAG,
     NOTMUCH_EXCLUDE_TRUE,
+    NOTMUCH_EXCLUDE_FALSE,
     NOTMUCH_EXCLUDE_ALL
 } notmuch_exclude_t;
 
@@ -517,6 +522,15 @@ typedef enum {
  * match in at least one non-excluded message.  Otherwise, if set to ALL,
  * notmuch_query_search_threads will omit excluded messages from all threads.
  *
+ * If set to FALSE or FLAG then both notmuch_query_search_messages and
+ * notmuch_query_search_threads will return all matching
+ * messages/threads regardless of exclude status. If set to FLAG then
+ * the exclude flag will be set for any excluded message that is
+ * returned by notmuch_query_search_messages, and the thread counts
+ * for threads returned by notmuch_query_search_threads will be the
+ * number of non-excluded messages/matches. Otherwise, if set to
+ * FALSE, then the exclude status is completely ignored.
+ *
  * The performance difference when calling
  * notmuch_query_search_messages should be relatively small (and both
  * should be very fast).  However, in some cases,
index 1cc768f887db5736fa1ec3399e68c9af32a6253e..69668a451ac7570481792ab5aa4cc81a132f8581 100644 (file)
@@ -218,13 +218,15 @@ notmuch_query_search_messages (notmuch_query_t *query)
        }
        messages->base.excluded_doc_ids = NULL;
 
-       if (query->exclude_terms) {
+       if ((query->omit_excluded != NOTMUCH_EXCLUDE_FALSE) && (query->exclude_terms)) {
            exclude_query = _notmuch_exclude_tags (query, final_query);
 
-           if (query->omit_excluded != NOTMUCH_EXCLUDE_FALSE)
+           if (query->omit_excluded == NOTMUCH_EXCLUDE_TRUE ||
+               query->omit_excluded == NOTMUCH_EXCLUDE_ALL)
+           {
                final_query = Xapian::Query (Xapian::Query::OP_AND_NOT,
                                             final_query, exclude_query);
-           else {
+           } else { /* NOTMUCH_EXCLUDE_FLAG */
                exclude_query = Xapian::Query (Xapian::Query::OP_AND,
                                           exclude_query, final_query);
 
index bc07877847dc85aa1247feedb89c9e25df1885a4..4dcf7053c0fa76d558a89037908b557833d39506 100644 (file)
@@ -238,20 +238,22 @@ _thread_add_message (notmuch_thread_t *thread,
     char *clean_author;
     notmuch_bool_t message_excluded = FALSE;
 
-    for (tags = notmuch_message_get_tags (message);
-        notmuch_tags_valid (tags);
-        notmuch_tags_move_to_next (tags))
-    {
-       tag = notmuch_tags_get (tags);
-       /* Is message excluded? */
-       for (notmuch_string_node_t *term = exclude_terms->head;
-            term != NULL;
-            term = term->next)
+    if (omit_exclude != NOTMUCH_EXCLUDE_FALSE) {
+       for (tags = notmuch_message_get_tags (message);
+            notmuch_tags_valid (tags);
+            notmuch_tags_move_to_next (tags))
        {
-           /* We ignore initial 'K'. */
-           if (strcmp(tag, (term->string + 1)) == 0) {
-               message_excluded = TRUE;
-               break;
+           tag = notmuch_tags_get (tags);
+           /* Is message excluded? */
+           for (notmuch_string_node_t *term = exclude_terms->head;
+                term != NULL;
+                term = term->next)
+           {
+               /* We ignore initial 'K'. */
+               if (strcmp(tag, (term->string + 1)) == 0) {
+                   message_excluded = TRUE;
+                   break;
+               }
            }
        }
     }
index 43232011ceef788651f71b04056a8d3ada6b87be..a20791a18af11d35f3467d82e2ab719b7b33f7b5 100644 (file)
@@ -411,7 +411,7 @@ notmuch_search_command (notmuch_config_t *config, int argc, char *argv[])
        for (i = 0; i < search_exclude_tags_length; i++)
            notmuch_query_add_tag_exclude (query, search_exclude_tags[i]);
        if (exclude == EXCLUDE_FLAG)
-           notmuch_query_set_omit_excluded (query, NOTMUCH_EXCLUDE_FALSE);
+           notmuch_query_set_omit_excluded (query, NOTMUCH_EXCLUDE_FLAG);
        if (exclude == EXCLUDE_ALL)
            notmuch_query_set_omit_excluded (query, NOTMUCH_EXCLUDE_ALL);
     }