aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Bremner <david@tethera.net>2017-03-08 08:31:51 -0400
committerDavid Bremner <david@tethera.net>2017-03-08 08:31:51 -0400
commit4e872c64e1ab63f35edfd4d0a6500cc24b62fe0d (patch)
treea8dcc4673cb550b24cb725bd83303f67fde78f7e
parent8f35cb889acd82a631cc7277ee3f97cf2f50e928 (diff)
parent29958b2b9a548d0cc6bc2a435e3476cdc6acd7d1 (diff)
Merge branch 'release'
new release candidate, with regexp fix
-rw-r--r--bindings/python/notmuch/version.py2
-rw-r--r--debian/changelog8
-rw-r--r--lib/regexp-fields.cc26
-rw-r--r--lib/regexp-fields.h2
-rw-r--r--version2
5 files changed, 33 insertions, 7 deletions
diff --git a/bindings/python/notmuch/version.py b/bindings/python/notmuch/version.py
index 43071028..7aa101d3 100644
--- a/bindings/python/notmuch/version.py
+++ b/bindings/python/notmuch/version.py
@@ -1,3 +1,3 @@
# this file should be kept in sync with ../../../version
-__VERSION__ = '0.24~rc0'
+__VERSION__ = '0.24~rc1'
SOVERSION = '4'
diff --git a/debian/changelog b/debian/changelog
index 3781acf5..b8a0bf9d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+notmuch (0.24~rc1-1) experimental; urgency=medium
+
+ * New upstream release candidate
+ * upstream release notes
+ * One library internals fix/optimization for regexp processing.
+
+ -- David Bremner <bremner@debian.org> Wed, 08 Mar 2017 08:08:34 -0400
+
notmuch (0.24~rc0-1) experimental; urgency=medium
* New upstream feature release (candidate).
diff --git a/lib/regexp-fields.cc b/lib/regexp-fields.cc
index b4174750..8e740a81 100644
--- a/lib/regexp-fields.cc
+++ b/lib/regexp-fields.cc
@@ -62,11 +62,6 @@ RegexpPostingSource::init (const Xapian::Database &db)
it_ = db_.valuestream_begin (slot_);
end_ = db.valuestream_end (slot_);
started_ = false;
-
- /* make sure we start on a matching value */
- while (!at_end() && regexec (&regexp_, (*it_).c_str (), 0, NULL, 0) != 0) {
- ++it_;
- }
}
Xapian::doccount
@@ -113,6 +108,27 @@ RegexpPostingSource::next (unused (double min_wt))
}
}
+void
+RegexpPostingSource::skip_to (Xapian::docid did, unused (double min_wt))
+{
+ started_ = true;
+ it_.skip_to (did);
+ for (; ! at_end (); ++it_) {
+ std::string value = *it_;
+ if (regexec (&regexp_, value.c_str (), 0, NULL, 0) == 0)
+ break;
+ }
+}
+
+bool
+RegexpPostingSource::check (Xapian::docid did, unused (double min_wt))
+{
+ started_ = true;
+ if (!it_.check (did) || at_end ())
+ return false;
+ return (regexec (&regexp_, (*it_).c_str (), 0, NULL, 0) == 0);
+}
+
static inline Xapian::valueno _find_slot (std::string prefix)
{
if (prefix == "from")
diff --git a/lib/regexp-fields.h b/lib/regexp-fields.h
index bac11999..a4ba7ad8 100644
--- a/lib/regexp-fields.h
+++ b/lib/regexp-fields.h
@@ -56,6 +56,8 @@ class RegexpPostingSource : public Xapian::PostingSource
Xapian::docid get_docid () const;
bool at_end () const;
void next (unused (double min_wt));
+ void skip_to (Xapian::docid did, unused (double min_wt));
+ bool check (Xapian::docid did, unused (double min_wt));
};
diff --git a/version b/version
index ab10aa0f..1a46dd0a 100644
--- a/version
+++ b/version
@@ -1 +1 @@
-0.24~rc0
+0.24~rc1