notmuch clon
Find a file
Carl Worth 2c262042ac lib: Remove the synchronization of 'T' flag with "deleted" tag.
Tags in a notmuch database affect all messages with the identical
message-ID. But maildir tags affect individual files. And since
multiple files can contain the identical message-ID, there is not a
one-to-one correspondence between messages affected by tags and flags.

This is particularly dangerous with the 'T' (== "trashed") maildir
flag and the corresponding "deleted" tag in the notmuch
database. Since these flags/tags are often used to trigger
irreversible deletion operations, the lack of one-to-one
correspondence can be potentially dangerous.

For example, consider the following sequence:

  1. A third-party application is used to identify duplicate messages
     in the mail store, and mark all-but-one of each duplicate with
     the 'T' flag for subsequent deletion.

  2. A "notmuch new" operation reads that 'T' flag, adding the
     "deleted" flag to the corresponding messages within the notmuch
     database.

  3. A subsequent notmuch operation, (such as a "notmuch dump; notmuch
     restore" cycle) synchronized the "deleted" tag back to the mail
     store, applying the 'T' flag to all(!) filenames with duplicate
     message IDs.

  4. A third-party application reads the 'T' flags and irreversibly
     deletes all mail messages which had any duplicates(!).

In order to avoid this scenario, we simply refuse to synchronize the
'T' flag with the "deleted" tag. Instead, applications can set 'T' and
act on it to delete files, or can set "deleted" and act on it to
delete files. But in either case the semantics are clear and there is
never dangerous propagation through the one-to-many mapping of notmuch
message objects to files.
2010-11-11 02:35:03 -08:00
bindings Merge in ruby bindings. 2010-11-08 10:08:34 -08:00
compat Wrap the compat header in extern "C" { } when compiling C++ sources 2010-04-27 10:39:54 -07:00
completion Makefile: Move the completion-specific commands to completion/Makefile.local 2010-04-06 14:36:31 -07:00
debian debian: Add a file stating the intended symbols to appear in the library 2010-11-01 23:24:44 -07:00
emacs Don't use kill-this-buffer to kill notmuch emacs buffers 2010-11-08 09:02:54 -08:00
lib lib: Remove the synchronization of 'T' flag with "deleted" tag. 2010-11-11 02:35:03 -08:00
packaging packaging: Add a pointer to where the debian packaging really is. 2010-04-06 14:42:09 -07:00
test test: Rework testing of maildir-synchronization feature. 2010-11-11 02:35:03 -08:00
vim vim: include own improved git-diff syntax 2010-11-08 10:00:18 -08:00
.gitignore make release: Add Debian package building and upload 2010-04-16 13:20:22 -07:00
AUTHORS Drop date.c file, (use identical function from GMime instead). 2009-11-02 14:36:33 -08:00
configure configure: Add a check for the -Wl,--as-needed flag. 2010-10-30 13:20:33 -07:00
COPYING Add copy of GNU General Public License (version 3). 2009-10-21 16:25:08 -07:00
COPYING-GPL-3 Add copy of GNU General Public License (version 3). 2009-10-21 16:25:08 -07:00
debugger.c notmuch-new: Only install SIGALRM if not running under gdb 2009-11-22 05:36:36 +01:00
gmime-filter-headers.c notmuch: Fix off-by-one errors if a header is >200 characters long. 2010-06-01 16:09:29 -07:00
gmime-filter-headers.h Decode headers in reply 2010-04-13 09:23:54 -07:00
gmime-filter-reply.c Filter out carriage-returns in show and reply output. 2009-11-18 23:34:43 +01:00
gmime-filter-reply.h Typsos 2009-11-18 03:21:36 -08:00
INSTALL INSTALL/README: Clean up the description of how to run the emacs interface. 2010-06-01 10:51:42 -07:00
json.c json_quote_chararray: Always return a newly talloced array 2010-04-20 08:55:31 -07:00
Makefile test: Fix test suite to integrate with our non-recursive Makefile system. 2010-09-17 12:16:10 -07:00
Makefile.local Makefile: Move the -Wl,-as-needed option earlier in the command line. 2010-11-01 23:24:44 -07:00
NEWS NEWS: Update NEWS files for a couple of recent changes. 2010-11-06 14:43:44 -07:00
notmuch-client.h Make maildir synchronization configurable 2010-11-10 13:09:32 -08:00
notmuch-config.c Make maildir synchronization configurable 2010-11-10 13:09:32 -08:00
notmuch-count.c notmuch count: Remove special handling of "*". 2010-04-09 17:44:01 -07:00
notmuch-dump.c lib: Rename iterator functions to prepare for reverse iteration. 2010-03-09 09:22:29 -08:00
notmuch-new.c Make maildir synchronization configurable 2010-11-10 13:09:32 -08:00
notmuch-reply.c notmuch: Eliminate some const-correctness warnings. 2010-10-27 18:07:37 -07:00
notmuch-restore.c Make maildir synchronization configurable 2010-11-10 13:09:32 -08:00
notmuch-search-tags.c lib: Rename iterator functions to prepare for reverse iteration. 2010-03-09 09:22:29 -08:00
notmuch-search.c Print nothing when search result is empty 2010-11-04 12:36:04 -07:00
notmuch-setup.c Make maildir synchronization configurable 2010-11-10 13:09:32 -08:00
notmuch-show.c Rename "notmuch cat" to "notmuch show --format=raw" 2010-11-06 12:03:51 -07:00
notmuch-tag.c Make maildir synchronization configurable 2010-11-10 13:09:32 -08:00
notmuch-time.c Add some const correctness to talloc 'ctx' parameter. 2009-11-17 19:10:37 -08:00
notmuch.1 Rename "notmuch cat" to "notmuch show --format=raw" 2010-11-06 12:03:51 -07:00
notmuch.c Rename "notmuch cat" to "notmuch show --format=raw" 2010-11-06 12:03:51 -07:00
notmuch.desktop notmuch.desktop: Clarify that this is the emacs interface to notmuch. 2010-01-24 07:30:08 +13:00
query-string.c notmuch: Break notmuch.c up into several smaller files. 2009-11-10 12:03:05 -08:00
README INSTALL/README: Clean up the description of how to run the emacs interface. 2010-06-01 10:51:42 -07:00
RELEASING Increment notmuch version to 0.4. 2010-11-01 16:16:03 -07:00
show-message.c notmuch: Add a 'part' subcommand 2010-04-02 09:43:03 +01:00
TODO TODO: Add idea for notmuch-bcc and notmuch-cc variables. 2010-11-05 15:00:28 -07:00
version Increment notmuch version to 0.4. 2010-11-01 16:16:03 -07:00
xutil.c lib: Add GCC visibility(hidden) pragmas to private header files. 2010-11-01 22:35:48 -07:00

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:

	(require 'notmuch)

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