mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 17:34:54 +01:00
notmuch clon
92559ee347
This test (T590-thread-breakage.sh) has known-broken subtests. If you have a two-message thread where message "B" is in-reply-to "A", notmuch rightly sees this as a single thread. But if you: * remove "A" from the message store * run "notmuch new" * add "A" back into the message store * re-run "notmuch new" Then notmuch sees the messages as distinct threads. This happens because if you insert "B" initially (before anything is known about "A"), then a "ghost message" gets added to the database in reference to "A" that is in the same thread, which "A" takes over when it appears. But if "A" is subsequently removed, no ghost message is retained, so when "A" appears, it is treated as a new thread. I see a few options to fix this: ghost-on-removal ---------------- We could unilaterally add a ghost upon message removal. This has a few disadvantages: the message index would leak information about what messages the user has ever been exposed to, and we also create a perpetually-growing dataset -- the ghosts can never be removed. ghost-on-removal-when-shared-thread-exists ------------------------------------------ We could add a ghost upon message removal iff there are other non-ghost messages with the same thread ID. We'd also need to remove all ghost messages that share a thread when the last non-ghost message in that thread is removed. This still has a bit of information leakage, though: the message index would reveal that i've seen a newer message in a thread, even if i had deleted it from my message store track-dependencies ------------------ rather than a simple "ghost-message" we could store all the (A,B) message-reference pairs internally, showing which messages A reference which other messages B. Then removal of message X would require deleting all message-reference pairs (X,B), and only deleting a ghost message if no (A,X) reference pair exists. This requires modifying the database by adding a new and fairly weird table that would need to be indexed by both columns. I don't know whether xapian has nice ways to do that. scan-dependencies ----------------- Without modifying the database, we could do something less efficient. Upon removal of message X, we could scan the headers of all non-ghost messages that share a thread with X. If any of those messages refers to X, we would add a ghost message. If none of them do, then we would just drop X entirely from the table. --------------------- One risk of attempted fixes to this problem is that we could fail to remove the search term indexes entirely. This test contains additional subtests to guard against that. This test also ensures that the right number of ghost messages exist in each situation; this will help us ensure we don't accumulate ghosts indefinitely or leak too much information about what messages we've seen or not seen, while still making it easy to reassemble threads when messages come in out-of-order. |
||
---|---|---|
bindings | ||
compat | ||
completion | ||
contrib | ||
debian | ||
devel | ||
doc | ||
emacs | ||
lib | ||
packaging | ||
parse-time-string | ||
performance-test | ||
test | ||
util | ||
vim | ||
.dir-locals.el | ||
.gitignore | ||
.travis.yml | ||
AUTHORS | ||
command-line-arguments.c | ||
command-line-arguments.h | ||
configure | ||
COPYING | ||
COPYING-GPL-3 | ||
crypto.c | ||
debugger.c | ||
gmime-filter-reply.c | ||
gmime-filter-reply.h | ||
hooks.c | ||
INSTALL | ||
Makefile | ||
Makefile.local | ||
mime-node.c | ||
NEWS | ||
notmuch-client.h | ||
notmuch-compact.c | ||
notmuch-config.c | ||
notmuch-count.c | ||
notmuch-dump.c | ||
notmuch-emacs-mua | ||
notmuch-insert.c | ||
notmuch-new.c | ||
notmuch-reply.c | ||
notmuch-restore.c | ||
notmuch-search.c | ||
notmuch-setup.c | ||
notmuch-show.c | ||
notmuch-tag.c | ||
notmuch-time.c | ||
notmuch.c | ||
notmuch.desktop | ||
query-string.c | ||
README | ||
README.rst | ||
sprinter-json.c | ||
sprinter-sexp.c | ||
sprinter-text.c | ||
sprinter.h | ||
status.c | ||
tag-util.c | ||
tag-util.h | ||
version |
Notmuch - thread-based email index, search and tagging. Notmuch is a system for indexing, searching, reading, and tagging large collections of email messages in maildir or mh format. It uses the Xapian library to provide fast, full-text search with a convenient search syntax. Notmuch is free software, released under the GNU General Public License version 3 (or later). Building notmuch ---------------- See the INSTALL file for notes on compiling and installing notmuch. Running notmuch --------------- After installing notmuch, start by running "notmuch setup" which will interactively prompt for configuration information such as your name, email address, and the directory which contains your mail archive to be indexed. You can change any answers later by running "notmuch setup" again or by editing the .notmuch-config file in your home directory. With notmuch configured you should next run "notmuch new" which will index all of your existing mail. This can take a long time, (several hours) if you have a lot of email, (hundreds of thousands of files). When new mail is delivered to your mail archive in the future, you will want to run "notmuch new" again. These runs will be much faster as they will only index new messages. Finally, you can prove to yourself that things are working by running some command-line searches such as "notmuch search from:someone@example.com" or "notmuch search subject:topic". See "notmuch help search-terms" for more details on the available search syntax. The command-line search output is not expected to be particularly friendly for day-to-day usage. Instead, it is expected that you will use an email interface that builds on the notmuch command-line tool or the libnotmuch library. Notmuch installs a full-featured email interface for use within emacs. To use this, first add the following line to your .emacs file: (autoload 'notmuch "notmuch" "Notmuch mail" t) Then, either run "emacs -f notmuch" or execute the command "M-x notmuch" from within a running emacs. If you're interested in a non-emacs-based interface to notmuch, then please join the notmuch community. Various other interfaces are already in progress, (an interface within vim, a curses interface, graphical interfaces based on evolution, and various web-based interfaces). The authors of these interfaces would love further testing or contribution. See contact information below. Contacting users and developers ------------------------------- The website for Notmuch is: http://notmuchmail.org The mailing list address for the notmuch community is: notmuch@notmuchmail.org We welcome any sort of questions, comments, kudos, or code there. Subscription is not required, (but if you do subscribe you'll avoid any delay due to moderation). See the website for subscription information. There is also an IRC channel dedicated to talk about using and developing notmuch: IRC server: irc.freenode.net Channel: #notmuch