notmuch clon
Find a file
Austin Clements 7f57b747b9 lib: Add per-message last modification tracking
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.
2015-08-13 23:52:51 +02:00
bindings notmuch 0.20.2 release 2015-06-27 15:29:52 +02:00
compat configure: add workaround for systems without zlib.pc 2014-06-21 16:40:39 -03:00
completion completion: complete addresses in from:/to: search terms 2015-03-13 07:56:38 +01:00
contrib notmuch-mutt: fix xargs/ln usage for OpenBSD compatibility 2015-05-04 08:04:38 +02:00
debian notmuch 0.20.2 release 2015-06-27 15:29:52 +02:00
devel build: extract library versions from notmuch.h 2015-08-10 13:53:55 +02:00
doc lib: define NOTMUCH_DEPRECATED macro, document its use. 2015-08-04 09:11:17 +02:00
emacs emacs/notmuch-mua.el: whitespace cleanup 2015-08-07 21:33:57 +02:00
lib lib: Add per-message last modification tracking 2015-08-13 23:52:51 +02:00
packaging packaging: fedora: add ruby bindings 2013-06-02 08:03:47 -03:00
parse-time-string parse-time-string: fix setting and rounding of seconds 2015-03-07 10:20:33 +01:00
performance-test test: make script exit (1) if it "fails" to source (.) a file 2015-08-07 21:56:39 +02:00
test test: make script exit (1) if it "fails" to source (.) a file 2015-08-07 21:56:39 +02:00
util hex-escape: remove unused variable default_buf_size 2014-10-05 07:30:46 +02:00
vim VIM: Improve performance of folders_render 2015-01-23 18:18:54 +01:00
.dir-locals.el .dir-locals.el: changed one-char comment prefix '; ' to two; '; ; ' 2012-01-22 08:41:37 -04:00
.gitignore gitignore: ignore sh.config and doc/config.dox 2014-10-28 12:12:33 +01:00
.travis.yml travis: Only notify IRC on success if the previous build failed 2014-08-05 08:03:05 -03:00
AUTHORS Drop date.c file, (use identical function from GMime instead). 2009-11-02 14:36:33 -08:00
command-line-arguments.c cli: add support for hierarchical command line option arrays 2014-11-05 23:17:00 +01:00
command-line-arguments.h cli: add support for hierarchical command line option arrays 2014-11-05 23:17:00 +01:00
configure configure: clean up messages around reading libnotmuch version 2015-08-10 21:24:40 +02: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
crypto.c CLI: set up infrastructure to make path to gpg configurable. 2015-03-09 08:19:28 +01:00
debugger.c notmuch-new: Only install SIGALRM if not running under gdb 2009-11-22 05:36:36 +01: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
hooks.c cli: Flush stdout before fork()ing to run hooks 2014-03-25 21:22:17 -03:00
INSTALL doc: remove support for rst2man 2015-01-22 08:37:25 +01:00
Makefile build: move canonical list of subdirectories to configure script 2014-03-25 08:32:10 -03:00
Makefile.local build: integrate building ruby bindings into notmuch build process 2015-06-12 09:12:28 +02:00
mime-node.c cli: mime node: fix compiler warning when building against gmime 2.4 2013-04-14 19:49:16 -03:00
NEWS NEWS: emacs: notmuch-{cli,emacs}-version usage 2015-08-07 21:46:33 +02:00
notmuch-client.h cli: add standard option processing to config, help and setup 2015-06-01 07:32:54 +02:00
notmuch-compact.c cli: define shared options, use for --help and --version 2015-06-01 07:32:54 +02:00
notmuch-config.c cli: add standard option processing to config, help and setup 2015-06-01 07:32:54 +02:00
notmuch-count.c cli: define shared options, use for --help and --version 2015-06-01 07:32:54 +02:00
notmuch-dump.c cli: define shared options, use for --help and --version 2015-06-01 07:32:54 +02:00
notmuch-emacs-mua notmuch-emacs-mua: non-forking escape () usage with backslash '\' escape 2015-04-03 09:27:35 +09:00
notmuch-insert.c cli: define shared options, use for --help and --version 2015-06-01 07:32:54 +02:00
notmuch-new.c cli/new: add more debugging output 2015-08-04 20:59:58 +02:00
notmuch-reply.c cli: define shared options, use for --help and --version 2015-06-01 07:32:54 +02:00
notmuch-restore.c cli: define shared options, use for --help and --version 2015-06-01 07:32:54 +02:00
notmuch-search.c cli: define shared options, use for --help and --version 2015-06-01 07:32:54 +02:00
notmuch-setup.c cli: add standard option processing to config, help and setup 2015-06-01 07:32:54 +02:00
notmuch-show.c cli: define shared options, use for --help and --version 2015-06-01 07:32:54 +02:00
notmuch-tag.c cli: define shared options, use for --help and --version 2015-06-01 07:32:54 +02:00
notmuch-time.c Add some const correctness to talloc 'ctx' parameter. 2009-11-17 19:10:37 -08:00
notmuch.c cli: enable notmuch --help command 2015-07-30 07:45:26 +02: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 emacs: instruct user to autoload notmuch instead of require'ing it 2014-03-30 11:02:08 -03:00
README.rst README.rst: typo/wording fixes 2014-10-24 14:28:44 +02:00
sprinter-json.c sprinters: bugfix when NULL passed for a string. 2012-08-12 21:25:01 +02:00
sprinter-sexp.c Adding an S-expression structured output printer. 2012-12-08 09:26:29 -04:00
sprinter-text.c sprinter: add text0 formatter for null character separated text 2012-12-18 17:03:34 -04:00
sprinter.h sprinter: add text0 formatter for null character separated text 2012-12-18 17:03:34 -04:00
tag-util.c cli: add missing \n in error message 2014-03-06 07:46:27 -04:00
tag-util.h cli: export function for illegal tag checking 2014-03-06 07:41:38 -04:00
version version: update to 0.20.2 2015-06-27 15:05:31 +02: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:

	(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