<feed xmlns='http://www.w3.org/2005/Atom'>
<title>notmuch/lib/database.cc, branch debian/0.18.1-1</title>
<subtitle>thread-based email index, search, and tagging</subtitle>
<id>https://git.notmuchmail.org/git/notmuch/atom?h=debian%2F0.18.1-1</id>
<link rel='self' href='https://git.notmuchmail.org/git/notmuch/atom?h=debian%2F0.18.1-1'/>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/'/>
<updated>2014-04-05T15:53:04Z</updated>
<entry>
<title>lib: replace the header parser with gmime</title>
<updated>2014-04-05T15:53:04Z</updated>
<author>
<name>Jani Nikula</name>
<email>jani@nikula.org</email>
</author>
<published>2014-03-30T21:21:49Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=473930bb6fb167078a9428ad85f53accf7d4559f'/>
<id>urn:sha1:473930bb6fb167078a9428ad85f53accf7d4559f</id>
<content type='text'>
The notmuch library includes a full blown message header parser. Yet
the same message headers are parsed by gmime during indexing. Switch
to gmime parsing completely.

These are the main changes:

* Gmime stops header parsing at the first invalid header, and presumes
  the message body starts from there. The current parser is quite
  liberal in accepting broken headers. The change means we will be
  much pickier about accepting invalid messages.

* The current parser converts tabs used in header folding to
  spaces. Gmime preserve the tabs. Due to a broken python library used
  in mailman, there are plenty of mailing lists that produce headers
  with tabs in header folding, and we'll see plenty of tabs. (This
  change has been mitigated in preparatory patches.)

* For pure header parsing, the current parser is likely faster than
  gmime, which parses the whole message rather than just the
  headers. Since we parse the message and its headers using gmime for
  indexing anyway, this avoids and extra header parsing round when
  adding new messages. In case of duplicate messages, we'll end up
  parsing the full message although just headers would be
  sufficient. All in all this should still speed up 'notmuch new'.

* Calls to notmuch_message_get_header() may be slightly slower than
  previously for headers that are not indexed in the database, due to
  parsing of the whole message. Within the notmuch code base, notmuch
  reply is the only such user.
</content>
</entry>
<entry>
<title>lib: make folder: prefix literal</title>
<updated>2014-03-11T22:51:22Z</updated>
<author>
<name>Jani Nikula</name>
<email>jani@nikula.org</email>
</author>
<published>2014-02-08T19:20:42Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=1fa8e40561aafb0ac4f51e0aba171a702b66fd86'/>
<id>urn:sha1:1fa8e40561aafb0ac4f51e0aba171a702b66fd86</id>
<content type='text'>
In xapian terms, convert folder: prefix from probabilistic to boolean
prefix, matching the paths, relative from the maildir root, of the
message files, ignoring the maildir new and cur leaf directories.

folder:foo matches all message files in foo, foo/new, and foo/cur.

folder:foo/new does *not* match message files in foo/new.

folder:"" matches all message files in the top level maildir and its
new and cur subdirectories.

This change constitutes a database change: bump the database version
and add database upgrade support for folder: terms. The upgrade also
adds path: terms.

Finally, fix the folder search test for literal folder: search, as
some of the folder: matching capabilities are lost in the
probabilistic to boolean prefix change.
</content>
</entry>
<entry>
<title>lib: add support for path: prefix searches</title>
<updated>2014-03-11T22:51:22Z</updated>
<author>
<name>Jani Nikula</name>
<email>jani@nikula.org</email>
</author>
<published>2014-02-08T18:50:44Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=59823f964250be6d0ddbdfc45d4b07803bab267d'/>
<id>urn:sha1:59823f964250be6d0ddbdfc45d4b07803bab267d</id>
<content type='text'>
The path: prefix is a literal boolean prefix matching the paths,
relative from the maildir root, of the message files.

path:foo matches all message files in foo (but not in foo/new or
foo/cur).

path:foo/new matches all message files in foo/new.

path:"" matches all message files in the top level maildir.

path:foo/** matches all message files in foo and recursively in all
subdirectories of foo.

path:** matches all message files recursively, i.e. all messages.
</content>
</entry>
<entry>
<title>compact: improve error messages on failures after compaction</title>
<updated>2013-11-20T00:15:02Z</updated>
<author>
<name>Tomi Ollila</name>
<email>tomi.ollila@iki.fi</email>
</author>
<published>2013-11-14T22:03:27Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=2fd7ef64baf02892a7bebfb57d593afb086145ef'/>
<id>urn:sha1:2fd7ef64baf02892a7bebfb57d593afb086145ef</id>
<content type='text'>
The error messages written during the steps replacing old
database with new now includes relevant paths and strerror.
</content>
</entry>
<entry>
<title>compact: unconditionally remove old wip database compact directory</title>
<updated>2013-11-20T00:14:28Z</updated>
<author>
<name>Tomi Ollila</name>
<email>tomi.ollila@iki.fi</email>
</author>
<published>2013-11-14T22:03:26Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=6452ae0fcb0a2ee45a47144da71a6de9d8dace2c'/>
<id>urn:sha1:6452ae0fcb0a2ee45a47144da71a6de9d8dace2c</id>
<content type='text'>
In case previous notmuch compact has been interrupted there is old
work-in-progress database compact directory partially filled. Remove
it just before starting to fill the directory with new files.
</content>
</entry>
<entry>
<title>compact: preserve backup database until compacted database is in place</title>
<updated>2013-11-20T00:13:25Z</updated>
<author>
<name>Tomi Ollila</name>
<email>tomi.ollila@iki.fi</email>
</author>
<published>2013-11-14T22:03:25Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=cb6cc296e27fdab85faa4bdd670eda2e0c53b8c2'/>
<id>urn:sha1:cb6cc296e27fdab85faa4bdd670eda2e0c53b8c2</id>
<content type='text'>
It is less error prone and window of failure opportunity is smaller
if the old (backup) database is always renamed (instead of sometimes
rmtree'd) before new (compacted) database is put into its place.
Finally rmtree() old database in case old database backup is not kept.
</content>
</entry>
<entry>
<title>compact: catch Xapian::Error consistently</title>
<updated>2013-11-18T00:25:43Z</updated>
<author>
<name>Tomi Ollila</name>
<email>tomi.ollila@iki.fi</email>
</author>
<published>2013-11-13T17:02:44Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=19a89753ca20b269a131e747238925cce254c627'/>
<id>urn:sha1:19a89753ca20b269a131e747238925cce254c627</id>
<content type='text'>
catch Xapian::Error in compact code in lib/database.cc to be consistent
with other code in addition to not making software crash on uncaught
other Xapian error.
</content>
</entry>
<entry>
<title>compact: tidy formatting</title>
<updated>2013-11-18T00:25:25Z</updated>
<author>
<name>Tomi Ollila</name>
<email>tomi.ollila@iki.fi</email>
</author>
<published>2013-11-13T17:02:43Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=4d5986e8ad671c1f5504894af6fbe37ba314bed8'/>
<id>urn:sha1:4d5986e8ad671c1f5504894af6fbe37ba314bed8</id>
<content type='text'>
Notmuch compact code whitespace changes to match devel/STYLE.
</content>
</entry>
<entry>
<title>lib: use the compaction backup path provided by the caller</title>
<updated>2013-11-07T10:51:16Z</updated>
<author>
<name>Jani Nikula</name>
<email>jani@nikula.org</email>
</author>
<published>2013-11-03T12:24:47Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=00d2ac2b41a6dba060837244ee87edce2fd1e465'/>
<id>urn:sha1:00d2ac2b41a6dba060837244ee87edce2fd1e465</id>
<content type='text'>
The extra path component added by the lib is a magic value that the
caller just has to know. This is demonstrated by the current code,
which indeed has "xapian.old" both sides of the interface. Use the
backup path provided by the lib caller verbatim, without adding
anything to it.
</content>
</entry>
<entry>
<title>lib: add closure parameter to compact status update callback</title>
<updated>2013-11-07T10:46:42Z</updated>
<author>
<name>Jani Nikula</name>
<email>jani@nikula.org</email>
</author>
<published>2013-11-03T12:24:45Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=180dba66e47a5257b2cdf2f1ceb59cc8fa5a69d4'/>
<id>urn:sha1:180dba66e47a5257b2cdf2f1ceb59cc8fa5a69d4</id>
<content type='text'>
This provides much more flexibility for the caller.
</content>
</entry>
</feed>
