<feed xmlns='http://www.w3.org/2005/Atom'>
<title>notmuch/lib/notmuch-private.h, branch 0.22.1</title>
<subtitle>thread-based email index, search, and tagging</subtitle>
<id>https://git.notmuchmail.org/git/notmuch/atom?h=0.22.1</id>
<link rel='self' href='https://git.notmuchmail.org/git/notmuch/atom?h=0.22.1'/>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/'/>
<updated>2016-04-15T10:07:23Z</updated>
<entry>
<title>Introduce _notmuch_message_has_term()</title>
<updated>2016-04-15T10:07:23Z</updated>
<author>
<name>Daniel Kahn Gillmor</name>
<email>dkg@fifthhorseman.net</email>
</author>
<published>2016-04-09T01:54:50Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=9eebae3da4510a671cbbb2f476c2dc04099b4415'/>
<id>urn:sha1:9eebae3da4510a671cbbb2f476c2dc04099b4415</id>
<content type='text'>
It can be useful to easily tell if a given message has a given term
associated with it.
</content>
</entry>
<entry>
<title>Add internal functions to search for alternate doc types</title>
<updated>2016-04-15T10:07:23Z</updated>
<author>
<name>Daniel Kahn Gillmor</name>
<email>dkg@fifthhorseman.net</email>
</author>
<published>2016-04-09T01:54:49Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=011fc41d4d1a1dc9ae3765c9f08ee603eea7bc7e'/>
<id>urn:sha1:011fc41d4d1a1dc9ae3765c9f08ee603eea7bc7e</id>
<content type='text'>
Publicly we are only exposing the non-ghost documents (of "type"
"mail").  But internally we might want to inspect the ghost messages
as well.

This changeset adds two new private interfaces to queries to recover
information about alternate document types.
</content>
</entry>
<entry>
<title>util: move strcase_equal and strcase_hash to util</title>
<updated>2015-09-07T12:43:31Z</updated>
<author>
<name>Jani Nikula</name>
<email>jani@nikula.org</email>
</author>
<published>2015-09-03T19:40:01Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=f460ad4e9a2516b05162cc57c2d3b0e8b814b0c2'/>
<id>urn:sha1:f460ad4e9a2516b05162cc57c2d3b0e8b814b0c2</id>
<content type='text'>
For future use in both cli and lib.
</content>
</entry>
<entry>
<title>lib: Add per-message last modification tracking</title>
<updated>2015-08-13T21:52:51Z</updated>
<author>
<name>Austin Clements</name>
<email>amdragon@mit.edu</email>
</author>
<published>2014-10-13T06:20:01Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=7f57b747b95eece465d10fd0acba20cc3dd868f1'/>
<id>urn:sha1:7f57b747b95eece465d10fd0acba20cc3dd868f1</id>
<content type='text'>
This adds a new document value that stores the revision of the last
modification to message metadata, where the revision number increases
monotonically with each database commit.

An alternative would be to store the wall-clock time of the last
modification of each message.  In principle this is simpler and has
the advantage that any process can determine the current timestamp
without support from libnotmuch.  However, even assuming a computer's
clock never goes backward and ignoring clock skew in networked
environments, this has a fatal flaw.  Xapian uses (optimistic)
snapshot isolation, which means reads can be concurrent with writes.
Given this, consider the following time line with a write and two read
transactions:

   write  |-X-A--------------|
   read 1       |---B---|
   read 2                      |---|

The write transaction modifies message X and records the wall-clock
time of the modification at A.  The writer hangs around for a while
and later commits its change.  Read 1 is concurrent with the write, so
it doesn't see the change to X.  It does some query and records the
wall-clock time of its results at B.  Transaction read 2 later starts
after the write commits and queries for changes since wall-clock time
B (say the reads are performing an incremental backup).  Even though
read 1 could not see the change to X, read 2 is told (correctly) that
X has not changed since B, the time of the last read.  In fact, X
changed before wall-clock time A, but the change was not visible until
*after* wall-clock time B, so read 2 misses the change to X.

This is tricky to solve in full-blown snapshot isolation, but because
Xapian serializes writes, we can use a simple, monotonically
increasing database revision number.  Furthermore, maintaining this
revision number requires no more IO than a wall-clock time solution
because Xapian already maintains statistics on the upper (and lower)
bound of each value stream.
</content>
</entry>
<entry>
<title>lib: eliminate fprintf from _notmuch_message_file_open</title>
<updated>2015-03-28T23:34:15Z</updated>
<author>
<name>David Bremner</name>
<email>david@tethera.net</email>
</author>
<published>2014-12-26T17:34:49Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=9d192da683b0656e37fc8d69c69698ca605926b3'/>
<id>urn:sha1:9d192da683b0656e37fc8d69c69698ca605926b3</id>
<content type='text'>
You may wonder why _notmuch_message_file_open_ctx has two parameters.
This is because we need sometime to use a ctx which is a
notmuch_message_t. While we could get the database from this, there is
no easy way in C to tell type we are getting.
</content>
</entry>
<entry>
<title>lib: add private function to extract the database for a message.</title>
<updated>2015-03-28T23:34:15Z</updated>
<author>
<name>David Bremner</name>
<email>david@tethera.net</email>
</author>
<published>2014-12-26T16:16:12Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=9b73a8bcc9cb381fc1a15013f4baa3ec9fdb97a7'/>
<id>urn:sha1:9b73a8bcc9cb381fc1a15013f4baa3ec9fdb97a7</id>
<content type='text'>
This is needed by logging in functions outside message.cc that take
only a notmuch_message_t object.
</content>
</entry>
<entry>
<title>lib: add a log function with output to a string in notmuch_database_t</title>
<updated>2015-03-28T23:34:15Z</updated>
<author>
<name>David Bremner</name>
<email>david@tethera.net</email>
</author>
<published>2014-12-26T08:01:01Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=b53e1a2da720e9a0efd815b92f0a54dc2f644ffc'/>
<id>urn:sha1:b53e1a2da720e9a0efd815b92f0a54dc2f644ffc</id>
<content type='text'>
In principle in the future this could do something fancier than
asprintf.
</content>
</entry>
<entry>
<title>lib: fix clang build warnings</title>
<updated>2015-02-25T22:09:39Z</updated>
<author>
<name>Jani Nikula</name>
<email>jani@nikula.org</email>
</author>
<published>2015-02-23T16:56:15Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=08757767de5c148cea8e7b97274789f851fbd854'/>
<id>urn:sha1:08757767de5c148cea8e7b97274789f851fbd854</id>
<content type='text'>
Fix the following warning produced by clang 3.5.0:

lib/message.cc:899:4: warning: comparison of constant 64 with expression of type 'notmuch_message_flag_t' (aka '_notmuch_message_flag') is always true [-Wtautological-constant-out-of-range-compare]
        ! NOTMUCH_TEST_BIT (message-&gt;lazy_flags, flag))
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./lib/notmuch-private.h:70:6: note: expanded from macro 'NOTMUCH_TEST_BIT'
    (_NOTMUCH_VALID_BIT(bit) ? !!((val) &amp; (1ull &lt;&lt; (bit))) : 0)
     ^~~~~~~~~~~~~~~~~~~~~~~
./lib/notmuch-private.h:68:26: note: expanded from macro '_NOTMUCH_VALID_BIT'
    ((bit) &gt;= 0 &amp;&amp; (bit) &lt; CHAR_BIT * sizeof (unsigned long long))
                   ~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</content>
</entry>
<entry>
<title>lib: abstract bit validity check in bit test/set/clear macros</title>
<updated>2015-02-25T22:08:35Z</updated>
<author>
<name>Jani Nikula</name>
<email>jani@nikula.org</email>
</author>
<published>2015-02-23T16:56:14Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=41b870fba5d09653dd9f22315cbca47e9a8c0d31'/>
<id>urn:sha1:41b870fba5d09653dd9f22315cbca47e9a8c0d31</id>
<content type='text'>
Reduce duplication in the bit test/set/clear macros. No functional
changes.
</content>
</entry>
<entry>
<title>lib: Internal support for querying and creating ghost messages</title>
<updated>2014-10-25T17:26:54Z</updated>
<author>
<name>Austin Clements</name>
<email>amdragon@mit.edu</email>
</author>
<published>2014-10-23T12:30:36Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=bc9c50602d20ce712188ea2cc3c5d30647d4d3f5'/>
<id>urn:sha1:bc9c50602d20ce712188ea2cc3c5d30647d4d3f5</id>
<content type='text'>
This updates the message abstraction to support ghost messages: it
adds a message flag that distinguishes regular messages from ghost
messages, and an internal function for initializing a newly created
(blank) message as a ghost message.
</content>
</entry>
</feed>
