6 years agocompletion: fail silently if _init_completion is not found
Jani Nikula [Mon, 18 Aug 2014 16:33:21 +0000 (19:33 +0300)]
completion: fail silently if _init_completion is not found

The completion script depends on bash-completion 1.90 or later, with
_init_completion function. If that's not present, for some reason, the
completion currently fails with an ugly message, messing up user's
command line:

$ notmuch -bash: _init_completion: command not found

It's better to just not complete

6 years agoMake parsing of References and In-Reply-To header less error prone
Michal Sojka [Mon, 26 May 2014 14:05:57 +0000 (16:05 +0200)]
Make parsing of References and In-Reply-To header less error prone

According to RFC2822 References and In-Reply-To headers are supposed
to contain one or more Message-IDs, however older RFC822 allowed
almost any content. When both References and In-Reply-To headers ends
with something else that a Message-ID (see e.g. [1]), the thread
structure presented by notmuch is incorrect. The reason is that
notmuch treats this case as if the email contained no "replyto"
information (see _notmuch_database_link_message_to_parents).

This patch changes the parse_references() function to return the last
valid Message-ID encountered rather than NULL resulting from the last
hunk of text not being the Message-ID.


6 years agoAdd test for incorrect threading of messages
Michal Sojka [Mon, 26 May 2014 14:05:56 +0000 (16:05 +0200)]
Add test for incorrect threading of messages

This happens when there is some garbage after the last Message-ID in
the References header. See for example

6 years agoemacs: Improved compatibility for window-body-width in Emacs < 24
Austin Clements [Fri, 8 Aug 2014 17:06:05 +0000 (13:06 -0400)]
emacs: Improved compatibility for window-body-width in Emacs < 24

Fix byte compiler warning "Warning: the function `window-body-width'
is not known to be defined." by moving our compatibility wrapper
before its use and simplify the definition to a defalias for the old
name of the function.

6 years agoMerge tag 'debian/0.18.1-2'
David Bremner [Sat, 9 Aug 2014 16:21:57 +0000 (13:21 -0300)]
Merge tag 'debian/0.18.1-2'

uploaded to Debian unstable

6 years agodebian: re-enable atomicity tests on armhf debian/0.18.1-2
David Bremner [Sat, 9 Aug 2014 15:02:30 +0000 (12:02 -0300)]
debian: re-enable atomicity tests on armhf

Commit a33ec9c seems to have fixed the problem on the armhf
porterbox (

6 years agodebian: build with emacs24 by default, disable gdb on arm64
David Bremner [Sat, 9 Aug 2014 12:42:04 +0000 (09:42 -0300)]
debian: build with emacs24 by default, disable gdb on arm64


Fixes for the port in progress of debian to arm64.

6 years agonotmuch-config: talloc_strdup MAILDIR and NAME environment variables
Tomi Ollila [Thu, 7 Aug 2014 15:19:50 +0000 (18:19 +0300)]
notmuch-config: talloc_strdup MAILDIR and NAME environment variables

When defined -- the pointer is soon given to talloc_free() which
expects it to be allocated by talloc.

6 years agoutil: Const version of strtok_len
Austin Clements [Fri, 1 Aug 2014 02:09:52 +0000 (22:09 -0400)]
util: Const version of strtok_len

Because of limitations in the C type system, we can't a strtok_len
that can work on both const string and non-const strings.  The C
library solves this by taking a const char* and returning a char*
in functions like this (e.g., strchr), but that's not const-safe.
Solve it by introducing strtok_len_c, a version of strtok_len for
const strings.

6 years agotest: Include generated dependencies for test sources
Austin Clements [Fri, 1 Aug 2014 02:09:51 +0000 (22:09 -0400)]
test: Include generated dependencies for test sources

Previously the build system was generating automatic header
dependencies for test sources, but only smtp-dummy was in SRCS, so
only its dependencies were being included.  Add all of the test
sources to SRCS so that the root Makefile.local includes their

6 years agonew: Report and abort on upgrade failure
Austin Clements [Tue, 5 Aug 2014 14:33:43 +0000 (10:33 -0400)]
new: Report and abort on upgrade failure

Previously the return status of notmuch_database_upgrade went
completely unchecked.

6 years agolib: Improve documentation of _notmuch_message_create_for_message_id
Austin Clements [Tue, 5 Aug 2014 01:29:16 +0000 (21:29 -0400)]
lib: Improve documentation of _notmuch_message_create_for_message_id

Clarify the state of the returned message when
_notmuch_message_create_for_message_id returns

6 years agoemacs: Expand default saved searches and add shortcut keys
Austin Clements [Tue, 5 Aug 2014 01:45:21 +0000 (21:45 -0400)]
emacs: Expand default saved searches and add shortcut keys

This should help new users off to a better start with the addition of
more sensible saved searches and default shortcut keys.  Most existing
users have probably customized this variable and won't be affected.

6 years agoemacs: Introduce notmuch-jump: shortcut keys to saved searches
Austin Clements [Tue, 5 Aug 2014 01:45:20 +0000 (21:45 -0400)]
emacs: Introduce notmuch-jump: shortcut keys to saved searches

This introduces notmuch-jump, which is like a user-friendly,
user-configurable global prefix map for saved searches.  This provides
a non-modal and much faster way to access saved searches than

A user configures shortcut keys in notmuch-saved-searches, which are
immediately accessible from anywhere in Notmuch under the "j" key (for
"jump").  When the user hits "j", the minibuffer immediately shows a
helpful table of bindings reminiscent of a completions buffer.

This code is a combination of work from myself (originally,
"notmuch-go"), David Edmondson, and modifications from Mark Walters.

6 years agotravis: Only notify IRC on success if the previous build failed
Austin Clements [Tue, 5 Aug 2014 01:57:48 +0000 (21:57 -0400)]
travis: Only notify IRC on success if the previous build failed

Without this, Travis is rather spammy.  Travis will continue to notify
the IRC channel on each build failure, which seems desirable.

6 years agolib: Fix slight misinformation in the database schema doc
Austin Clements [Fri, 1 Aug 2014 02:59:13 +0000 (22:59 -0400)]
lib: Fix slight misinformation in the database schema doc

The database schema documentation made it sound like each mail
document had exactly one on-disk message file, which hasn't been true
for a long time.

6 years agolib: Invalidate message metadata in _notmuch_message_gen_terms
Austin Clements [Fri, 1 Aug 2014 02:59:27 +0000 (22:59 -0400)]
lib: Invalidate message metadata in _notmuch_message_gen_terms

Previously, we invalidated stored message metadata in
_notmuch_message_add_term and _notmuch_message_remove_term, but not in
_notmuch_message_gen_terms.  This doesn't currently result in any bugs
because of our limited uses of _notmuch_message_gen_terms, but it may
could cause trouble in the future.

7 years agoconfig: read database.path from $MAILDIR if set
Mark Oteiza [Mon, 21 Jul 2014 23:05:12 +0000 (19:05 -0400)]
config: read database.path from $MAILDIR if set

Try to read the config parameter database.path from $MAILDIR before
falling back to $HOME/mail

7 years agoconfig: read from $NAME if set
Mark Oteiza [Mon, 21 Jul 2014 03:06:28 +0000 (23:06 -0400)]
config: read from $NAME if set

Try to read the config parameter from $NAME before taking the
user name from /etc/passwd.

7 years agoutil: Make string-util.h C++-compatible
Austin Clements [Tue, 29 Jul 2014 16:48:00 +0000 (12:48 -0400)]
util: Make string-util.h C++-compatible

7 years agoemacs: Clarify that notmuch-poll-script is deprecated
Austin Clements [Thu, 24 Jul 2014 21:19:31 +0000 (17:19 -0400)]
emacs: Clarify that notmuch-poll-script is deprecated

notmuch-poll-script has long since been deprecated in favor of
post-new hooks, but this wasn't obvious from the documentation.
Update the documentation to make this clear.  Since
notmuch-poll-script could, to some extend, be used to control the path
of the notmuch binary and that use is now clearly discouraged, promote
notmuch-command to a real defcustom instead of just a variable.

7 years agoemacs: show: make return value of notmuch-show-get-prop explicit
Mark Walters [Wed, 16 Jul 2014 18:03:16 +0000 (19:03 +0100)]
emacs: show: make return value of notmuch-show-get-prop explicit

This makes the fact the notmuch-show-get-prop returns nil if the major
mode is neither show not tree explicit.

7 years agodump: make dump take Xapian write lock
Mark Walters [Mon, 23 Jun 2014 20:12:29 +0000 (21:12 +0100)]
dump: make dump take Xapian write lock

Dump currently only takes the read lock. Xapian can cope with some
changes while maintaining a read snapshot but with more changes it
fails. Currently notmuch just gives a xapian error.

To avoid this we take the write lock when dumping. This prevents other
notmuch processes from modifying the xapian database preventing this

Discussion with Olly on irc indicates that this is currently the best
solution: in xapian trunk there may be better possibilities using
snapshots but they need to make it to a release and propogate out to
users before we can switch approach.

Finally, this breaks one use case: pipelines of the form

notmuch dump | ... | notmuch restore

According to Olly this is already very fragile: it will only work on
small databases. One of the tests relies on this behaviour so fix that
to store the dump rather than use a pipe.

7 years agonmbug: Handle missing @upstream in is_unmerged
W. Trevor King [Sun, 6 Jul 2014 20:40:20 +0000 (13:40 -0700)]
nmbug: Handle missing @upstream in is_unmerged

If we don't have an upstream, there is nothing to merge, so nothing is
unmerged.  This avoids errors like:

  $ nmbug status
  error: No upstream configured for branch 'master'
  error: No upstream configured for branch 'master'
  fatal: ambiguous argument '@{upstream}': unknown revision or path not in the working tree.
  Use '--' to separate paths from revisions, like this:
  'git <command> [<revision>...] -- [<file>...]'
  'git rev-parse @{upstream}' exited with nonzero value

You might not have an upstream if you're only using nmbug locally to
version-control your tags.

7 years agotest: Test thread linking in all possible delivery orders
Austin Clements [Wed, 9 Jul 2014 21:15:38 +0000 (17:15 -0400)]
test: Test thread linking in all possible delivery orders

These tests deliver all possible (single-root) four-message threads in
all possible orders and check that notmuch successfully links them
into threads.  These tests supersede and replace the previous and much
less thorough "T260-thread-order" tests.

There are two variants of the test: one delivers messages that
reference only their immediate parent and the other delivers messages
that reference all of their parents.  The latter test is currently

7 years agoEnable Travis-CI as a backup continuous integration service.
Wael M. Nasreddine [Fri, 23 May 2014 17:51:48 +0000 (10:51 -0700)]
Enable Travis-CI as a backup continuous integration service.

You can access the dashboard at

7 years agoemacs: tree/show remove duplicate function
Mark Walters [Sat, 7 Jun 2014 09:51:08 +0000 (10:51 +0100)]
emacs: tree/show remove duplicate function

tree overrides notmuch-show-get-prop so that it can use many of the
utility function directly. Now that tree is in mainline the version
from tree can be moved to show and the original overridden show
version dropped.

7 years agonmbug: Add a git_with_status helper function
W. Trevor King [Sun, 6 Jul 2014 20:40:19 +0000 (13:40 -0700)]
nmbug: Add a git_with_status helper function

Sometimes we want to catch Git errors and handle them, instead of
dying with an error message.  This lower-level version of git() allows
us to get the error status when we want it.

7 years agoemacs: set default in notmuch-read-query
Mark Walters [Mon, 23 Jun 2014 21:06:46 +0000 (22:06 +0100)]
emacs: set default in notmuch-read-query

This adds the current query as a "default value" to
notmuch-read-qeury. The default value is available via a down-arrow as
opposed to history which is available from the up arrow.

Note if a user presses return in the minibuffer this value is not

The implementation is simple but notmuch-read-query could be called
via notmuch-search/notmuch-tree etc from any buffer so it makes sense
to put the decision of how to extract the current query in
notmuch-read-query rather than in each of the callers.

7 years agonmbug-status: Optionally load the header and footer templates from the config
W. Trevor King [Sat, 31 May 2014 22:20:27 +0000 (15:20 -0700)]
nmbug-status: Optionally load the header and footer templates from the config

For folks that don't like the default templates for whatever reason.

7 years agonmbug-status: Add the time to the footer's build-date
W. Trevor King [Sat, 31 May 2014 22:20:26 +0000 (15:20 -0700)]
nmbug-status: Add the time to the footer's build-date

Our repository [1] has a post-update hook that rebuilds the status
page after each push.  Since that may happen several times a day, we
might as well show the build time (as well as the date) in the footer.

The trailing 'Z' is the ISO 8601 designator for UTC.  Now that we're
showing times, it's nice to be explicit about the timezone we're

The rename from date -> datetime gives us backward-compatibility for
folks that *do* only want the date.  We keep the old date formatting
to support those folks.


7 years agonmbug-status: Factor out header/footer context into a shared dict
W. Trevor King [Sat, 31 May 2014 22:20:25 +0000 (15:20 -0700)]
nmbug-status: Factor out header/footer context into a shared dict

Rather than splitting this context into header-only and footer-only
groups, just dump it all in a shared dict.  This will make it easier
to eventually split the header/footer templates out of this script
(e.g. if we want to load them from the config file).

7 years agoMove the generated date from the top of the page to the footer.
Carl Worth [Sat, 31 May 2014 22:20:24 +0000 (15:20 -0700)]
Move the generated date from the top of the page to the footer.

It's useful reference information, but anyone who wants it will look
for and find it.  We don't need this front-and-center.  Follow the
pattern set by our header template with a triple-quoted string.

The gray <hr> styling is less agressive.  IE uses 'color' for drawing
the rule, while Gecko and Opera use the border or 'background-color'


7 years agoAdd a docstring describing the program
Carl Worth [Sat, 31 May 2014 22:20:23 +0000 (15:20 -0700)]
Add a docstring describing the program

Prefer a docstring to a header comment so we can use it as the
ArgumentParser description (formatted with 'nmbug-status --help').
Script readers still have it near the top of the file.  Since it's a
docstring, use PEP 257's summary-line-and-body format [1].


7 years agoAdd explicit license information
Carl Worth [Sat, 31 May 2014 22:20:22 +0000 (15:20 -0700)]
Add explicit license information

It's nice to have for situations where this script is found outside of
the notmuch source repository (e.g. after being installed).

7 years agoemacs: search archive tweak
Mark Walters [Fri, 6 Jun 2014 12:48:33 +0000 (13:48 +0100)]
emacs: search archive tweak

notmuch-search-archive-thread moves to the next line after tagging. In
the normal case this makes sense, but if the region is active, it tags
the whole region and then it doesn't really. Thus only move to the
next line if region is not active.

7 years agotest: redirect gdb output to a file.
David Bremner [Tue, 6 May 2014 13:06:28 +0000 (22:06 +0900)]
test: redirect gdb output to a file.

It seems that the normal output redirection in the test suite doesn't
work for gdb, but it's nice to have output in a file for debugging.

7 years agodevel: news2wiki to recognize yyyy-mm-dd or UNRELEASED as release date
Tomi Ollila [Wed, 7 May 2014 19:33:38 +0000 (22:33 +0300)]
devel: news2wiki to recognize yyyy-mm-dd or UNRELEASED as release date

The yyyy-mm-dd (actually \d\d\d\d-\d\d-\d\d) for a bit more restrictive
(and self-documentative) than the \w\w\w\w-... that used to be there and
UNRELEASED so that developers can test the latest NEWS converted to mdwn
format before submitting NEWS patches.

7 years agoemacs: show: add an update seen function to post-command-hook
Mark Walters [Fri, 9 May 2014 00:20:08 +0000 (01:20 +0100)]
emacs: show: add an update seen function to post-command-hook

Add a function for updating seen messages to the
post-command-hook. This function calls a customizable (by eg
defcustom) function with parameters the start and end of the current
window and that function can decide what to mark read based on that
and the current point.

Since this is in the post-command-hook it should get called after most
user actions (exceptions include user resizing the window) so it
should be possible to make sure the seen status gets updated whether
the user uses notmuch commands like next-message or normal emacs
commands like scroll-up.

It removes all of the old mark read/seen points but introduces a
simple example function that just marks the current message read if it
is open. This function has one small subtlety: it makes sure it
doesn't mark the same message read twice (in the same instance of the
same buffer); otherwise the post-command-hook makes it impossible for
a user to manually mark a message unread.

This fixes the current bugs (imo) that closed messages can be marked
read, and that opening a closed message does not mark it read.

Another advantage of using the post-command-hook any programmatic use
with point passing through a message will not mark it read.

7 years agotest: make test_emacs call post-command-hook
David Bremner [Fri, 9 May 2014 00:20:07 +0000 (01:20 +0100)]
test: make test_emacs call post-command-hook

The unread/read changes will use the post-command-hook. test_emacs
does not call the post-command-hook. This adds a notmuch-test-progn
which takes a list of commands as argument and executes them in turn
but runs the post-command-hook after each one.

The caller can batch operations (ie to stop post-command-hook from
being interleaved) by wrapping the batch of operations inside a progn.

We also explicitly run the post-command-hook before getting the output
from a test; this makes sense as this will be a place the user would
be seeing the information.

7 years agoemacs: Fix indentation.
David Edmondson [Fri, 9 May 2014 08:22:21 +0000 (09:22 +0100)]
emacs: Fix indentation.

Fix the indentation of `notmuch-show-mode-map'.

7 years agolib: Start all function names in notmuch-private.h with
Charles Celerier [Tue, 13 May 2014 09:44:05 +0000 (05:44 -0400)]
lib: Start all function names in notmuch-private.h with

As noted in devel/STYLE, every private library function should start
with _notmuch. This patch corrects function naming that did not adhere
to this style in lib/notmuch-private.h. In particular, the old function
names that now begin with _notmuch are


Signed-off-by: Charles Celerier <>
7 years agotest: use sh.config for configuration
Jani Nikula [Fri, 30 May 2014 07:43:05 +0000 (10:43 +0300)]
test: use sh.config for configuration

7 years agobuild: generate sh.config for feeding configure results to shell scripts
Jani Nikula [Fri, 30 May 2014 07:43:04 +0000 (10:43 +0300)]
build: generate sh.config for feeding configure results to shell scripts

Only include the relevant information.

Amended by David Bremner:

Use a prefix NOTMUCH_ to minimize collisions with other

7 years agodocs: remove spurious man page generated from doxygen
David Bremner [Sat, 12 Jul 2014 21:04:52 +0000 (18:04 -0300)]
docs: remove spurious man page generated from doxygen

There is a doxygen bug about these odd files,

But it isn't clear if / when a fix will be provided, so just delete it
to avoid e.g. confusing

7 years agoNEWS: add minimal item for API change to close/destroy
David Bremner [Wed, 9 Jul 2014 23:39:26 +0000 (20:39 -0300)]
NEWS: add minimal item for API change to close/destroy

7 years agolib: add return status to database close and destroy
Jani Nikula [Wed, 16 Apr 2014 12:59:16 +0000 (22:59 +1000)]
lib: add return status to database close and destroy

notmuch_database_close may fail in Xapian ->flush() or ->close(), so
report the status. Similarly for notmuch_database_destroy which calls

This is required for notmuch insert to report error status if message
indexing failed.

7 years agobuild: check .git directory existence in srcdir (for out-of-tree builds)
Tomi Ollila [Tue, 6 May 2014 19:35:28 +0000 (22:35 +0300)]
build: check .git directory existence in srcdir (for out-of-tree builds)

So that $(VERSION) and version.stamp uses the git-describe -based
version data instead of the content of `version' file.

For consistency also the git commands in Makefile[.local] target
`verify-no-dirty-code' uses the git --git-dir=$srcdir/.git ...
commands (inside ifeq($(IS_GIT),yes)). Attempting to make this
target outside of the tree will fail in any case.

7 years agodoc: postprocess notmuch.3
David Bremner [Tue, 1 Jul 2014 19:13:03 +0000 (16:13 -0300)]
doc: postprocess notmuch.3

Remove excess italics from doxygen output. It seems to make no
sense (and is certainly ugly) to italicize the first argument to the
.RI macro.

7 years agodoc: quiet doxygen warnings
David Bremner [Sun, 6 Jul 2014 14:23:42 +0000 (11:23 -0300)]
doc: quiet doxygen warnings

remove some obsolete tags for XML output (which we don't currently
generate in any case)

7 years agodoc: build and install doxygen api docs
David Bremner [Tue, 1 Jul 2014 16:40:33 +0000 (13:40 -0300)]
doc: build and install doxygen api docs

In order to support out of tree builds and avoid hardcoding version
number, generate `doc/config.dox` from configure.

7 years agoconfigure: use cc/c++ instead of gcc/g++
Fraser Tweedale [Thu, 22 May 2014 10:10:06 +0000 (20:10 +1000)]
configure: use cc/c++ instead of gcc/g++

Some systems (e.g. FreeBSD 10) do not ship with the GNU Compiler
Collection.  Use generic cc/c++ instead of gcc/g++ (unless the
CC/CXX environment variables are used).

7 years agoMerge tag '0.18.1'
David Bremner [Wed, 25 Jun 2014 11:01:17 +0000 (08:01 -0300)]
Merge tag '0.18.1'

notmuch 0.18.1 release

7 years agoversion: bump to 0.18.1 0.18.1 debian/0.18.1-1
David Bremner [Wed, 25 Jun 2014 10:24:57 +0000 (07:24 -0300)]
version: bump to 0.18.1

Also add precis of NEWS to debian changelog

7 years agoNEWS: Improve and correct "Fix for phrase indexing" entry
Austin Clements [Mon, 23 Jun 2014 14:25:28 +0000 (10:25 -0400)]
NEWS: Improve and correct "Fix for phrase indexing" entry

This improves the description of the fix, fixes some typos, and
changes "(re)-indexed" to "indexed" because we have no particular
notion of "re-indexing" a message.

7 years agoNEWS: quibbles from Tomi
David Bremner [Mon, 23 Jun 2014 09:36:30 +0000 (06:36 -0300)]
NEWS: quibbles from Tomi

See for details

7 years agoMerge tag '0.18.1_rc0'
David Bremner [Mon, 23 Jun 2014 01:25:10 +0000 (22:25 -0300)]
Merge tag '0.18.1_rc0'

notmuch 0.18.1~rc0 release

7 years agoversion: bump to 0.18.1~rc0
David Bremner [Mon, 23 Jun 2014 00:23:22 +0000 (21:23 -0300)]
version: bump to 0.18.1~rc0

Also bump the python bindings version, the NEWS version and the Debian

Since the changelog is (slightly dubiously) metadata, we have to
change it to upload a release candidate.

7 years agoNEWS: add news for 0.18.1
David Bremner [Sat, 21 Jun 2014 20:09:01 +0000 (17:09 -0300)]
NEWS: add news for 0.18.1

This is my summary of the commits from 0.18.

7 years agoemacs: Forwarded messages should not have modified buffers
David Edmondson [Mon, 16 Jun 2014 05:30:11 +0000 (06:30 +0100)]
emacs: Forwarded messages should not have modified buffers

When the user begins forwarding a message, the resulting composition
buffer should not be marked as modified, in order that it can
immediately be killed without prompting.

7 years agoMerge branch 'release'
David Bremner [Sun, 22 Jun 2014 09:53:21 +0000 (06:53 -0300)]
Merge branch 'release'

Austin's termpos patches and Felipe's zlib.pc workaround

7 years agoconfigure: add workaround for systems without zlib.pc
Felipe Contreras [Mon, 12 May 2014 03:09:32 +0000 (22:09 -0500)]
configure: add workaround for systems without zlib.pc

Some systems (e.g. FreeBSD) might not have installed the appropriate
pkg-config file as they should. We can workaround the issue by creating
the .pc file they should have distributed.

Signed-off-by: Felipe Contreras <>
7 years agolib: Separate all phrases indexed by _notmuch_message_gen_terms
Austin Clements [Mon, 16 Jun 2014 02:40:34 +0000 (22:40 -0400)]
lib: Separate all phrases indexed by _notmuch_message_gen_terms

This adds a 100 termpos gap between all phrases indexed by
_notmuch_message_gen_terms.  This fixes a bug where terms from the end
of one header and the beginning of another header could match together
in a single phrase and a separate bug where term positions of
un-prefixed terms overlapped.

This fix only affects newly indexed messages.  Messages that are
already indexed won't benefit from this fix without re-indexing, but
the fix won't make things any worse for existing messages.

7 years agotest: Known-broken test for overlapping/adjacent termpos
Austin Clements [Mon, 16 Jun 2014 02:40:33 +0000 (22:40 -0400)]
test: Known-broken test for overlapping/adjacent termpos

This adds two known-broken tests and one working test related to the
term positions assigned to terms from different headers or MIME parts.
The first test fails because we don't create a termpos gap between
different headers.  The second test fails because we don't adjust
termpos at all when indexing multiple parts.

7 years agolib: Index name and address of from/to headers as a phrase
Austin Clements [Mon, 16 Jun 2014 02:40:32 +0000 (22:40 -0400)]
lib: Index name and address of from/to headers as a phrase

Previously, we indexed the name and address parts of from/to headers
with two calls to _notmuch_message_gen_terms.  In general, this
indicates that these parts are separate phrases.  However, because of
an implementation quirk, the two calls to _notmuch_message_gen_terms
generated adjacent term positions for the prefixed terms, which
happens to be the right thing to do in this case, but the wrong thing
to do for all other calls.  Furthermore, _notmuch_message_gen_terms
produced potentially overlapping term positions for the un-prefixed
copies of the terms, which is simply wrong.

This change indexes both the name and address in a single call to
_notmuch_message_gen_terms, indicating that they should be part of a
single phrase.  This masks the problem with the un-prefixed terms
(fixing the two known-broken tests) and puts us in a position to fix
the unintentionally phrases generated by other calls to

7 years agotest: Add search tests for combined name/address queries
Austin Clements [Mon, 16 Jun 2014 02:40:31 +0000 (22:40 -0400)]
test: Add search tests for combined name/address queries

Two of these are currently known-broken.  We index the name and
address parts in two separate calls to _notmuch_message_gen_terms.
Currently this has the effect of placing the term positions of the
prefixed terms from the second call right after those of the first
call, but screws up the term positions of the non-prefixed terms.

7 years agotest: Fix from/to search test queries
Austin Clements [Mon, 16 Jun 2014 02:40:30 +0000 (22:40 -0400)]
test: Fix from/to search test queries

Two of the search tests for "from" and "to" queries were clearly
trying to search for prefixed phrases, but forgot to shell quote the
phrases.  Fix this by quoting them correctly.

7 years agoMerge branch 'release'
David Bremner [Sun, 15 Jun 2014 18:52:18 +0000 (15:52 -0300)]
Merge branch 'release'

still painfully slowly assembling 0.18.1

7 years agoemacs install: make sure all components to be installed are there
Tomi Ollila [Sat, 10 May 2014 21:36:43 +0000 (00:36 +0300)]
emacs install: make sure all components to be installed are there

`make install-emacs` will copy $(emacs_sources), $(emacs_images) and
$(emacs_bytecode) to their target directories. $(emacs_bytecode) was
already a prerequisite of make install-emacs as these obviously needed
to be build. Until a while ago all of $(emacs_sources) was available
in the repository, but now it includes `notmuch-version.el` which
is generated. In the future we may have generated emacs images too.

7 years agodebian: update notmuch-emacs for emacsen-common 2.0.8
David Bremner [Sat, 14 Jun 2014 10:50:52 +0000 (07:50 -0300)]
debian: update notmuch-emacs for emacsen-common 2.0.8

- redo install/remove scripts from new samples
- symlink .el files properly
- add depends instead of conflicts

7 years agodebian: tighten dependency of python packages on libnotmuch.
David Bremner [Sat, 14 Jun 2014 10:20:56 +0000 (07:20 -0300)]
debian: tighten dependency of python packages on libnotmuch.

Using (>= ${source:Version}) allows newer versions of the library with
the same SONAME.

7 years agoMerge branch 'release'
David Bremner [Sat, 14 Jun 2014 02:03:49 +0000 (23:03 -0300)]
Merge branch 'release'

Merge in a few more commits towards 0.18.1

7 years agolib: resurrect support for single-message mbox files
Jani Nikula [Thu, 5 Jun 2014 06:34:09 +0000 (08:34 +0200)]
lib: resurrect support for single-message mbox files

This is effectively a revert of

commit 6812136bf576d894591606d9e10096719054d1f9
Author: Jani Nikula <>
Date:   Mon Mar 31 00:21:48 2014 +0300

    lib: drop support for single-message mbox files

The intention was to drop support for indexing new single-message mbox
files (and whether that was a good idea in the first place is
arguable). However this inadvertently broke support for reading
headers from previously indexed single-message mbox files, which is
far worse.

Distinguishing between the two cases would require more code than
simply bringing back support for single-message mbox files.

7 years agotest: use --quick when starting emacs.
David Bremner [Thu, 29 May 2014 00:26:27 +0000 (21:26 -0300)]
test: use --quick when starting emacs.

At least in emacs24, this removes the "site-lisp" directories from the
load path in addition to enforcing --no-site-lisp --no-init-file.

This works around a slightly mysterious bug on Debian that causes
test-lib.el not to load when there is cl-lib.el(c) in some site-lisp
directory.  It should be harmless in general since we really don't
want to load any files from addon packages to emacs.

7 years agobuild: add dataclean
David Bremner [Sun, 4 May 2014 06:10:49 +0000 (15:10 +0900)]
build: add dataclean

It turns out to be inconvenient to delete the downloaded datafiles with
distclean, so I propose a new target which does that instead.

The closest conventional target is 'maintainer-clean'; the difference
here is that having the original source tarball is not enough to
reconstruct these files.

7 years agobuild: remove .tar.gz.tmp files in clean
David Bremner [Sun, 4 May 2014 06:10:48 +0000 (15:10 +0900)]
build: remove .tar.gz.tmp files in clean

Most people won't see these, but they annoy anyone running release
or pre-release targets.

7 years agobuild: don't overwrite DISTCLEAN in performance-test
David Bremner [Sun, 4 May 2014 06:10:47 +0000 (15:10 +0900)]
build: don't overwrite DISTCLEAN in performance-test

This might have worked once for some fixed order of including
makefiles, but it is clearly wrong now.

7 years agoMerge branch 'release'
David Bremner [Wed, 28 May 2014 12:50:32 +0000 (09:50 -0300)]
Merge branch 'release'

A point release is slowly being built on branch release. Merge those
changes into master.

7 years agobuild: fix order of rpath
Felipe Contreras [Mon, 12 May 2014 02:22:25 +0000 (21:22 -0500)]
build: fix order of rpath

In my system `pkg-config --libs talloc` returns
'Wl,-rpath,/usr/lib -ltalloc' (probably wrongly) which causes the final
LDFLAGS to be something like '-Wl,-rpath,/usr/lib
-Wl,-rpath,/opt/notmuch/lib', which causes the RUNPATH to be
'/usr/lib:/opt/notmuch/lib', so basically defeating the whole purpose of

I noticed this when my /opt/notmuch/bin/notmuch (0.17) started updating
the database after I updated the system (which updated the system's
notmuch). This shouldn't happen.

Let's move the RUNPATH flags before other external flags have a chance of
screwing the build.

Signed-off-by: Felipe Contreras <>
7 years agoUnset html_static_path in Python bindings docs
Amadeusz Żołnowski [Mon, 12 May 2014 10:35:41 +0000 (12:35 +0200)]
Unset html_static_path in Python bindings docs

html_static_path is a kind of source directory and it was set to
destination directory (../html) which caused infinite recursion with
Sphinx 1.2 and above.

7 years agodoc/ Remove _static from html_static_path
W. Trevor King [Sat, 10 May 2014 15:55:21 +0000 (08:55 -0700)]
doc/ Remove _static from html_static_path


  $ make HAVE_SPHINX=1 sphinx-html
  python ./doc/ ./doc doc/_build doc/
  sphinx-build -b html -d doc/_build/doctrees -q ./doc doc/_build/html
  Making output directory...
  WARNING: html_static_path entry '/home/wking/src/notmuch/notmuch/doc/_static' does not exist

because we have no static source in doc/_static.

7 years agoemacs: make sure tagging on an empty query is harmless
Mark Walters [Wed, 21 May 2014 09:58:50 +0000 (10:58 +0100)]
emacs: make sure tagging on an empty query is harmless

Currently notmuch-tag throws a "wrong-type-argument stringp nil" if
passed a nil query-string. Catch this and provide a more useful error
message. This fixes a case in notmuch-tree (if you try to tag when at
the end of the buffer).

Secondly, as pointed out by David (dme)
`notmuch-search-find-stable-query-region' can return the query string
() if there are no messages in the region. This gets passed to notmuch
tag, and due to interactions in the optimize_query code in
notmuch-tag.c becomes, in the case tag-change is -inbox, "( () ) and
(tag:inbox)". This query matches some strange collection of messages
which then get archived. This should probably be fixed, but in any
case make `notmuch-search-find-stable-query-region' return a nil
query-string in this case.

This avoids data-loss (random tag removal) in this case.

7 years agoemacs: Correct the documentation for `notmuch-search-line-faces'.
David Edmondson [Tue, 6 May 2014 10:03:30 +0000 (11:03 +0100)]
emacs: Correct the documentation for `notmuch-search-line-faces'.

The implementation and documentation for `notmuch-search-line-faces'
disagreed in how elements in the list were merged. Correct the
documentation to match the implementation (that is, the earlier
elements in the list have precedence over later elements).

7 years agoruby: Add wrapper for notmuch_query_count_threads
Wael M. Nasreddine [Sat, 10 May 2014 21:40:11 +0000 (14:40 -0700)]
ruby: Add wrapper for notmuch_query_count_threads

7 years agoMerge branch 'release'
David Bremner [Sat, 17 May 2014 21:37:48 +0000 (06:37 +0900)]
Merge branch 'release'

bugfix release being built up on release.

7 years agotest: allow pending break points in atomicity script.
David Bremner [Tue, 6 May 2014 13:06:27 +0000 (22:06 +0900)]
test: allow pending break points in atomicity script.

This seems to fix problems with the symbol rename not being defined
at startup on at least OS/X and some Debian Linux architectures.

7 years agotest/Makefile.local: Added configured TALLOC_LDFLAGS.
Charles Celerier [Tue, 6 May 2014 17:02:24 +0000 (13:02 -0400)]
test/Makefile.local: Added configured TALLOC_LDFLAGS.

The linking to talloc is hard-coded in the testing Makefile. This patch
causes the linking to talloc to be done according to how TALLOC_LDFLAGS
was configured.

Signed-off-by: Charles Celerier <>
7 years agonotmuch-dump: use fsync instead of fdatasync
David Bremner [Thu, 8 May 2014 11:57:07 +0000 (20:57 +0900)]
notmuch-dump: use fsync instead of fdatasync

Since the file size will have changed, there is no performance benefit
to calling fdatasync.  Somewhat surprisingly, using fdatasync
apparently causes portability problems on FreeBSD.

7 years agoMerge in a few Debian commits.
David Bremner [Thu, 8 May 2014 21:38:42 +0000 (06:38 +0900)]
Merge in a few Debian commits.

7 years agodebian: disable atomicity tests on armel.
David Bremner [Thu, 8 May 2014 05:28:13 +0000 (14:28 +0900)]
debian: disable atomicity tests on armel.

Another temporary fix for build problems.

7 years agodebian: disable atomicity tests on armhf
David Bremner [Wed, 7 May 2014 23:29:15 +0000 (08:29 +0900)]
debian: disable atomicity tests on armhf

In fact a fix for these tests is currently being reviewed, but I want
to roll it together with a few other portability fixes for a point

7 years agoMerge tag '0.18'
David Bremner [Tue, 6 May 2014 08:14:26 +0000 (17:14 +0900)]
Merge tag '0.18'

notmuch 0.18 release

7 years agodebian: changelog stanza for 0.18 0.18
David Bremner [Tue, 6 May 2014 07:27:29 +0000 (16:27 +0900)]
debian: changelog stanza for 0.18

plagiariaze my own summary from upstream NEWS

7 years agoversion: bump to 0.18
David Bremner [Tue, 6 May 2014 07:24:17 +0000 (16:24 +0900)]
version: bump to 0.18

debian changelog to be done seperately.

7 years agoemacs: allow functions in notmuch-show-stash-mlarchive-link-alist
Jani Nikula [Thu, 1 May 2014 12:35:11 +0000 (15:35 +0300)]
emacs: allow functions in notmuch-show-stash-mlarchive-link-alist

Some archives may use a more complicated scheme for referring to
messages than just concatenated url and message-id. In particular,
patchwork requires a query to translate message-id to a patchwork
patch id. Allow functions in notmuch-show-stash-mlarchive-link-alist
to facilitate this.

For example, one could use something like this for patchwork.

(lambda (message-id)
   (nth 0
 (car (last (process-lines "pwclient" "search" "-n" "1"
   "-m" (concat "<" message-id ">"))))))))

7 years agoMerge tag '0.18_rc1'
David Bremner [Sat, 3 May 2014 23:32:05 +0000 (08:32 +0900)]
Merge tag '0.18_rc1'

notmuch 0.18~rc1 release

7 years agobuild: use UPSTREAM_TAG and not VERSION to generate tarball 0.18_rc1 debian/0.18_rc1-1
David Bremner [Sat, 3 May 2014 23:11:35 +0000 (08:11 +0900)]
build: use UPSTREAM_TAG and not VERSION to generate tarball

The latter can have "~" in it, which is not legal for a git tag.

7 years agodoc/doxygen.cfg: bump version to 0.18
David Bremner [Sat, 3 May 2014 22:38:21 +0000 (07:38 +0900)]
doc/doxygen.cfg: bump version to 0.18

7 years agoversion: bump for 0.18~rc1
David Bremner [Sat, 3 May 2014 22:32:43 +0000 (07:32 +0900)]
version: bump for 0.18~rc1

Doing all of the needed version bumps in one commit, and do a
complete, if minimal debian changelog entry

7 years agovim: improve the way messages are sent
Felipe Contreras [Thu, 1 May 2014 22:57:54 +0000 (17:57 -0500)]
vim: improve the way messages are sent

We want the proper encoding and content-type to be set when sending the
mail, but human-readable plain-text for composing. So split the code in
two parts: the presentation and the transport conversion.

This fixes an issue while sending non-ascii mails to strict servers; the
mail needs to be encoded.

Signed-off-by: Felipe Contreras <>