notmuch/lib
Austin Clements 58a4277d3b lib: Implement ghost-based thread linking
This updates the thread linking code to use ghost messages instead of
user metadata to link messages into threads.

In contrast with the old approach, this is actually correct.
Previously, thread merging updated only the thread IDs of message
documents, not thread IDs stored in user metadata.  As originally
diagnosed by Mark Walters [1] and as demonstrated by the broken
T260-thread-order test, this can cause notmuch to fail to link
messages even though they're in the same thread.  In principle the old
approach could have been fixed by updating the user metadata thread
IDs as well, but these are not indexed and hence this would have
required a full scan of all stored thread IDs.  Ghost messages solve
this problem naturally by reusing the exact same thread ID and message
ID representation and indexing as regular messages.

Furthermore, thanks to this greater symmetry, ghost messages are also
algorithmically simpler.  We continue to support the old user metadata
format, so this patch can't delete any code, but when we do remove
support for the old format, several functions can simply be deleted.

[1] id:8738h7kv2q.fsf@qmul.ac.uk
2014-10-25 19:27:07 +02:00
..
database-private.h lib: Add a ghost messages database feature 2014-10-25 19:25:54 +02:00
database.cc lib: Implement ghost-based thread linking 2014-10-25 19:27:07 +02:00
directory.cc lib: Return an error from operations that require an upgrade 2014-08-30 11:39:41 -07:00
filenames.c lib: fix NULL checks for filenames iterators 2012-09-01 23:03:11 -03:00
gen-version-script.sh build: add canonicalize_file_name to symbols exported from libnotmuch.so 2014-04-19 05:58:34 +09:00
index.cc lib: Index name and address of from/to headers as a phrase 2014-06-18 17:55:14 -03:00
libsha1.c util: detect byte order 2013-11-27 07:43:29 -04:00
libsha1.h fix sum moar typos [comments in source code] 2011-06-23 15:58:39 -07:00
Makefile fix sum moar typos [build scripts, Makefiles] 2011-06-23 15:44:59 -07:00
Makefile.local lib: bump soname 2014-09-16 20:16:31 +02:00
message-file.c lib: Start all function names in notmuch-private.h with 2014-07-13 12:25:29 -03:00
message.cc lib: Internal support for querying and creating ghost messages 2014-10-25 19:26:54 +02:00
messages.c lib: Eliminate _notmuch_message_list_append 2013-02-18 20:20:38 -04:00
notmuch-private.h lib: Internal support for querying and creating ghost messages 2014-10-25 19:26:54 +02:00
notmuch.h lib: Internal support for querying and creating ghost messages 2014-10-25 19:26:54 +02:00
parse-time-vrp.cc lib: add date range query support 2012-10-31 16:55:32 -03:00
parse-time-vrp.h lib: add date range query support 2012-10-31 16:55:32 -03:00
query.cc lib: make notmuch_threads_valid return FALSE when passed NULL 2014-01-24 20:20:54 -04:00
sha1.c lib: Start all function names in notmuch-private.h with 2014-07-13 12:25:29 -03:00
string-list.c Fixup string list author 2011-03-21 02:45:18 -04:00
tags.c lib: fix warnings when building with clang 2012-12-01 08:10:32 -04:00
thread.cc lib: Start all function names in notmuch-private.h with 2014-07-13 12:25:29 -03:00