From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by arlo.cworth.org (Postfix) with ESMTP id 392946DE0AF5 for ; Thu, 13 Apr 2017 20:14:39 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at cworth.org X-Spam-Flag: NO X-Spam-Score: 0.001 X-Spam-Level: X-Spam-Status: No, score=0.001 tagged_above=-999 required=5 tests=[AWL=0.000, HEADER_FROM_DIFFERENT_DOMAINS=0.001] autolearn=disabled Received: from arlo.cworth.org ([127.0.0.1]) by localhost (arlo.cworth.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 86CDlOreg5cH for ; Thu, 13 Apr 2017 20:14:37 -0700 (PDT) Received: from fethera.tethera.net (fethera.tethera.net [198.245.60.197]) by arlo.cworth.org (Postfix) with ESMTPS id 10D996DE0A9A for ; Thu, 13 Apr 2017 20:14:37 -0700 (PDT) Received: from remotemail by fethera.tethera.net with local (Exim 4.84_2) (envelope-from ) id 1cyrIc-0005sm-8i; Thu, 13 Apr 2017 22:49:26 -0400 Received: (nullmailer pid 6374 invoked by uid 1000); Fri, 14 Apr 2017 02:50:08 -0000 From: David Bremner To: notmuch@notmuchmail.org Subject: [PATCH 08/10] lib: add _notmuch_message_remove_indexed_terms Message-Id: <20170414025004.5334-9-david@tethera.net> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170414025004.5334-1-david@tethera.net> References: <20170414025004.5334-1-david@tethera.net> X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Date: Fri, 14 Apr 2017 03:14:39 -0000 X-Original-Date: Thu, 13 Apr 2017 23:50:02 -0300 X-List-Received-Date: Fri, 14 Apr 2017 03:14:39 -0000 Testing will be provided via use in notmuch_message_reindex --- lib/message.cc | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ lib/notmuch-private.h | 2 ++ 2 files changed, 56 insertions(+) diff --git a/lib/message.cc b/lib/message.cc index 5291e846..313660da 100644 --- a/lib/message.cc +++ b/lib/message.cc @@ -599,6 +599,59 @@ _notmuch_message_remove_terms (notmuch_message_t *message, const char *prefix) } } + +/* Remove all terms generated by indexing, i.e. not tags or + * properties, along with any automatic tags*/ +notmuch_private_status_t +_notmuch_message_remove_indexed_terms (notmuch_message_t *message) +{ + Xapian::TermIterator i; + + const std::string + id_prefix = _find_prefix ("id"), + property_prefix = _find_prefix ("property"), + tag_prefix = _find_prefix ("tag"), + type_prefix = _find_prefix ("type"); + + for (i = message->doc.termlist_begin (); + i != message->doc.termlist_end (); i++) { + + const std::string term = *i; + + if (term.compare (0, type_prefix.size (), type_prefix) == 0) + continue; + + if (term.compare (0, id_prefix.size (), id_prefix) == 0) + continue; + + if (term.compare (0, property_prefix.size (), property_prefix) == 0) + continue; + + if (term.compare (0, tag_prefix.size (), tag_prefix) == 0 && + term.compare (1, strlen("encrypted"), "encrypted") != 0 && + term.compare (1, strlen("signed"), "signed") != 0 && + term.compare (1, strlen("attachment"), "attachment") != 0) + continue; + + try { + message->doc.remove_term ((*i)); + message->modified = TRUE; + } catch (const Xapian::InvalidArgumentError) { + /* Ignore failure to remove non-existent term. */ + } catch (const Xapian::Error &error) { + notmuch_database_t *notmuch = message->notmuch; + + if (!notmuch->exception_reported) { + _notmuch_database_log(_notmuch_message_database (message), "A Xapian exception occurred creating message: %s\n", + error.get_msg().c_str()); + notmuch->exception_reported = TRUE; + } + return NOTMUCH_PRIVATE_STATUS_XAPIAN_EXCEPTION; + } + } + return NOTMUCH_PRIVATE_STATUS_SUCCESS; +} + /* Return true if p points at "new" or "cur". */ static bool is_maildir (const char *p) { @@ -646,6 +699,7 @@ _notmuch_message_add_folder_terms (notmuch_message_t *message, talloc_free (folder); + message->modified = TRUE; return NOTMUCH_STATUS_SUCCESS; } diff --git a/lib/notmuch-private.h b/lib/notmuch-private.h index 69179177..ebfba35d 100644 --- a/lib/notmuch-private.h +++ b/lib/notmuch-private.h @@ -534,6 +534,8 @@ _notmuch_message_add_reply (notmuch_message_t *message, notmuch_database_t * _notmuch_message_database (notmuch_message_t *message); +void +_notmuch_message_remove_unprefixed_terms (notmuch_message_t *message); /* sha1.c */ char * -- 2.11.0