3 years agocrypto: index encrypted parts when indexopts try_decrypt is set.
Daniel Kahn Gillmor [Sat, 21 Oct 2017 02:25:41 +0000 (22:25 -0400)]
crypto: index encrypted parts when indexopts try_decrypt is set.

If we see index options that ask us to decrypt when indexing a
message, and we encounter an encrypted part, we'll try to descend into

If we can decrypt, we add the property index.decryption=success.

If we can't decrypt (or recognize the encrypted type of mail), we add
the property index.decryption=failure.

Note that a single message may have both values of the
"index.decryption" property: "success" and "failure".  For example,
consider a message that includes multiple layers of encryption.  If we
manage to decrypt the outer layer ("index.decryption=success"), but
fail on the inner layer ("index.decryption=failure").

Because of the property name, this will be automatically cleared (and
possibly re-set) during re-indexing.  This means it will subsequently
correspond to the actual semantics of the stored index.

3 years agoreindex: drop all properties named with prefix "index."
Daniel Kahn Gillmor [Sat, 21 Oct 2017 02:25:40 +0000 (22:25 -0400)]
reindex: drop all properties named with prefix "index."

This allows us to create new properties that will be automatically set
during indexing, and cleared during re-indexing, just by choice of
property name.

3 years agodoc: add notmuch-properties(7)
Daniel Kahn Gillmor [Sat, 21 Oct 2017 02:25:39 +0000 (22:25 -0400)]
doc: add notmuch-properties(7)

We will want a user-facing place to record details about the use of
notmuch properties shortly.  This establishes a new manual page for
that purpose.

3 years agoindex: implement notmuch_indexopts_t with try_decrypt
Daniel Kahn Gillmor [Sat, 21 Oct 2017 02:25:38 +0000 (22:25 -0400)]
index: implement notmuch_indexopts_t with try_decrypt

This is currently mostly a wrapper around _notmuch_crypto_t that keeps
its internals private and doesn't expose any of the GMime API.
However, non-crypto indexing options might also be added later
(e.g. filters or other transformations).

3 years agobuild: don't copy the test directory for out-of-tree builds
Jani Nikula [Mon, 25 Sep 2017 20:38:39 +0000 (23:38 +0300)]
build: don't copy the test directory for out-of-tree builds

It should now work without.

3 years agotest: use source path in add_gnupg_home
Jani Nikula [Sat, 21 Oct 2017 19:21:41 +0000 (22:21 +0300)]
test: use source path in add_gnupg_home

Make a distinction between source and build directories.

3 years agotest: remove --root option and fix TMP_DIRECTORY cleanup
Jani Nikula [Sat, 21 Oct 2017 11:58:02 +0000 (14:58 +0300)]
test: remove --root option and fix TMP_DIRECTORY cleanup

The primary motivation here is to fix TMP_DIRECTORY cleanup prior to
running each test when the current working directory is not the test
subdirectory. Tests with failures would leave their TMP_DIRECTORY
directory behind for debugging, and repeated out-of-tree test runs
would have old temp directories. (This lead to e.g.
hanging because emacs would prompt for overwriting files.)

We remove the likely anyway defunct --root test option while at it,
just to be on the safe side when doing 'rm -rf' on the TMP_DIRECTORY.

3 years agotest: use source and build paths in
Jani Nikula [Mon, 25 Sep 2017 20:38:38 +0000 (23:38 +0300)]
test: use source and build paths in

Make a distinction between source and build directories.

3 years agotest: use source and build paths in
Jani Nikula [Mon, 25 Sep 2017 20:38:37 +0000 (23:38 +0300)]
test: use source and build paths in

Make a distinction between source and build directories.

3 years agotest: use source and build paths in T4?0-emacs-*.sh
Jani Nikula [Mon, 25 Sep 2017 20:38:36 +0000 (23:38 +0300)]
test: use source and build paths in T4?0-emacs-*.sh

Make a distinction between source and build directories.

3 years agotest: use source and build paths in
Jani Nikula [Mon, 25 Sep 2017 20:38:35 +0000 (23:38 +0300)]
test: use source and build paths in

Make a distinction between source and build directories.

3 years agotest: use source and build paths in
Jani Nikula [Mon, 25 Sep 2017 20:38:34 +0000 (23:38 +0300)]
test: use source and build paths in

Make a distinction between source and build directories.

3 years agotest: use source and build paths in
Jani Nikula [Mon, 25 Sep 2017 20:38:33 +0000 (23:38 +0300)]
test: use source and build paths in

Make a distinction between source and build directories.

3 years agotest: use source and build paths in
Jani Nikula [Mon, 25 Sep 2017 20:38:31 +0000 (23:38 +0300)]
test: use source and build paths in

Make a distinction between source and build directories.

3 years agotest: use source and build paths in
Jani Nikula [Mon, 25 Sep 2017 20:38:30 +0000 (23:38 +0300)]
test: use source and build paths in

Make a distinction between source and build directories.

3 years agotest: use source and build paths in and
Jani Nikula [Mon, 25 Sep 2017 20:38:29 +0000 (23:38 +0300)]
test: use source and build paths in and

Make a distinction between source and build directories.

3 years agotest: use source and build paths in
Jani Nikula [Mon, 25 Sep 2017 20:38:28 +0000 (23:38 +0300)]
test: use source and build paths in

Make a distinction between source and build directories.

3 years agotest: use source and build paths in notmuch-test
Jani Nikula [Mon, 25 Sep 2017 20:38:27 +0000 (23:38 +0300)]
test: use source and build paths in notmuch-test

Make a distinction between source and build directories.

3 years agotest: mkdir and cd to $TMP_DIRECTORY instead of $test for testing
Jani Nikula [Mon, 25 Sep 2017 20:38:26 +0000 (23:38 +0300)]
test: mkdir and cd to $TMP_DIRECTORY instead of $test for testing

$TMP_DIRECTORY is a full path, while $test is not.

3 years agotest: use source and build paths in
Jani Nikula [Mon, 25 Sep 2017 20:38:25 +0000 (23:38 +0300)]
test: use source and build paths in

Make a distinction between source and build directories.

The expectation is that anyone sourcing has sourced

3 years agoperf-test: use source and build paths in
Jani Nikula [Mon, 25 Sep 2017 20:38:24 +0000 (23:38 +0300)]
perf-test: use source and build paths in

Make a distinction between source and build directories.

3 years agotest: use source and build paths in
Jani Nikula [Mon, 25 Sep 2017 20:38:23 +0000 (23:38 +0300)]
test: use source and build paths in

Make a distinction between source and build directories.

3 years agotest: add a script to figure out source and build directories
Jani Nikula [Mon, 25 Sep 2017 20:38:22 +0000 (23:38 +0300)]
test: add a script to figure out source and build directories

Expect the tests to be run somewhere in the build directory
hierarchy. Allow for source and build directories to be passed through
the environment.

3 years agotest: check for notmuch binary in
Jani Nikula [Mon, 25 Sep 2017 20:38:21 +0000 (23:38 +0300)]
test: check for notmuch binary in

Move notmuch executable check into common code. Redundant for
notmuch-test runs, but works also for individual tests.

3 years agoperf-test: use $(dirname "$0") for sourcing
Jani Nikula [Mon, 25 Sep 2017 20:38:20 +0000 (23:38 +0300)]
perf-test: use $(dirname "$0") for sourcing

Don't assume the tests are always run from within the source tree.

3 years agotest: use $(dirname "$0") for sourcing
Jani Nikula [Mon, 25 Sep 2017 20:38:19 +0000 (23:38 +0300)]
test: use $(dirname "$0") for sourcing

Don't assume the tests are always run from within the source tree.

3 years agobuild: use NOTMUCH_SRCDIR for referencing notmuch-test
Jani Nikula [Mon, 25 Sep 2017 20:38:18 +0000 (23:38 +0300)]
build: use NOTMUCH_SRCDIR for referencing notmuch-test

Don't assume the tests are always run from within the source tree.

3 years agotest: use corpora/default not corpus in
Jani Nikula [Mon, 25 Sep 2017 20:38:17 +0000 (23:38 +0300)]
test: use corpora/default not corpus in

Turns out round trip tests didn't really round trip anything. Broken
by yours truly in 971cdc72cdb8 ("test: make it possible to have
multiple corpora"). Ooops.

3 years agoproperties: add notmuch_message_remove_all_properties_with_prefix()
Daniel Kahn Gillmor [Tue, 17 Oct 2017 19:09:59 +0000 (15:09 -0400)]
properties: add notmuch_message_remove_all_properties_with_prefix()

Subsequent patches will introduce a convention that properties whose
name starts with "index." will be stripped (and possibly re-added)
during re-indexing.  This patch lays the groundwork for doing that.

3 years agocrypto: make shared crypto code behave library-like
Daniel Kahn Gillmor [Tue, 17 Oct 2017 19:09:56 +0000 (15:09 -0400)]
crypto: make shared crypto code behave library-like

If we're going to reuse the crypto code across both the library and
the client, then it needs to report error states properly and not
write to stderr.

3 years agocrypto: move into libnotmuch_util
Daniel Kahn Gillmor [Tue, 17 Oct 2017 19:09:55 +0000 (15:09 -0400)]
crypto: move into libnotmuch_util

This prepares us for using the crypto object in both libnotmuch and
the client.

3 years agodoc: make SEE ALSO references one-per-line
Daniel Kahn Gillmor [Tue, 17 Oct 2017 16:57:21 +0000 (12:57 -0400)]
doc: make SEE ALSO references one-per-line

This will make future diffs cleaner, make it easier to keep them
alphabetical, and make it easier to scan and search the documentation

3 years agodoc: fix documentation typos and copy/paste-os
Daniel Kahn Gillmor [Tue, 17 Oct 2017 16:57:20 +0000 (12:57 -0400)]
doc: fix documentation typos and copy/paste-os

3 years agocli: make notmuch count --exclude a boolean argument
Jani Nikula [Sat, 14 Oct 2017 20:18:36 +0000 (23:18 +0300)]
cli: make notmuch count --exclude a boolean argument

Commit 0f314c0c99be ("cli: convert notmuch_bool_t to stdbool")
over-eagerly converted EXCLUDE_TRUE and EXCLUDE_FALSE to EXCLUDE_true
and EXCLUDE_false in notmuch-count.c. We could just fix the case back,
but convert the option to an actual boolean argument instead.

We've used a keyword argument rather than a boolean argument for
notmuch count --exclude for five years, since commit 785c1e497f05
("cli: move count to the new --exclude=(true|false|flag) naming
scheme."), "to allow future options to be added more easily". I think
we can conclude future options aren't coming any time soon.

3 years agogmime-extra: drop compat layer for g_mime_multipart_encrypted_decrypt
Daniel Kahn Gillmor [Tue, 10 Oct 2017 05:49:10 +0000 (01:49 -0400)]
gmime-extra: drop compat layer for g_mime_multipart_encrypted_decrypt

In practice, we're going to see this function invoked differently
depending on which gmime we build against.  The compatibility layer
forces our code into the lowest-common-denominator -- unable to make
use of new features even when built against a newer version.

Dropping the compatibility layer paves the way for clearer use of
features from GMime 3.0 in future commits.

3 years agotests: prepare for more crypto tests (using add_gnupg_home)
Daniel Kahn Gillmor [Tue, 10 Oct 2017 05:49:08 +0000 (01:49 -0400)]
tests: prepare for more crypto tests (using add_gnupg_home)

Move add_gnupg_home to to prepare it for reuse.

3 years agogmime-extra: remove duplicate GMimeAddressType typedef
Daniel Kahn Gillmor [Tue, 10 Oct 2017 05:49:06 +0000 (01:49 -0400)]
gmime-extra: remove duplicate GMimeAddressType typedef

"typedef GMimeAddressType GMimeRecipientType" is already present
further down in the compatibility wrapper (with other typedefs).  We
don't need it twice.

3 years agocrypto: _notmuch_crypto_cleanup should return void
Daniel Kahn Gillmor [Tue, 10 Oct 2017 05:49:04 +0000 (01:49 -0400)]
crypto: _notmuch_crypto_cleanup should return void

There's no chance that _notmuch_crypto_cleanup() will ever return
anything other than 0, and no one ever checks its return value anyway.
So make it return void instead of int.

3 years agocrypto: drop pretense of notmuch_crypto_context_t
Daniel Kahn Gillmor [Tue, 10 Oct 2017 05:49:03 +0000 (01:49 -0400)]
crypto: drop pretense of notmuch_crypto_context_t

notmuch_crypto_context_t was introduced (i think) as some sort of
abstraction layer to make notmuch somewhat independent of GMime.  But
it isn't even useful for GMime 3.0 or later -- we can drop the
pretense that it's some sort of abstraction in this case, and just
call it what it is, GMimeCryptoContext, which is useful for building
against older versions of GMime.

This also renames _notmuch_crypto_get_context() to

3 years agocrypto: rename notmuch_crypto_t to _notmuch_crypto_t
Daniel Kahn Gillmor [Tue, 10 Oct 2017 05:49:02 +0000 (01:49 -0400)]
crypto: rename notmuch_crypto_t to _notmuch_crypto_t

The notmuch_crypto_t struct isn't used externally, and we have no
plans to explicitly export it.  Prefix its name (and associated
functions) with _ to make that intent clear.

3 years agolib: convert notmuch_bool_t to stdbool internally
Jani Nikula [Sat, 7 Oct 2017 08:44:05 +0000 (11:44 +0300)]
lib: convert notmuch_bool_t to stdbool internally

C99 stdbool turned 18 this year. There really is no reason to use our
own, except in the library interface for backward
compatibility. Convert the lib internally to stdbool.

3 years agocli: convert notmuch_bool_t to stdbool
Jani Nikula [Sat, 7 Oct 2017 08:44:04 +0000 (11:44 +0300)]
cli: convert notmuch_bool_t to stdbool

C99 stdbool turned 18 this year. There really is no reason to use our
own, except in the library interface for backward
compatibility. Convert the cli and test binaries to stdbool.

3 years agodevel/ consistent naming, consistent quoting
Tomi Ollila [Tue, 3 Oct 2017 05:18:25 +0000 (08:18 +0300)]
devel/ consistent naming, consistent quoting

Renamed from to be consistent with
other files in this directory.

Fixed quoting in "$srcdir" usage for additional robustness, other
quoting changes for consistency.

3 years agocli: reduce indent in keyword argument processing
Jani Nikula [Sun, 1 Oct 2017 20:53:21 +0000 (23:53 +0300)]
cli: reduce indent in keyword argument processing

Reducing indent makes future changes easier. No functional changes.

3 years agocli: change while to for in keyword argument processing
Jani Nikula [Sun, 1 Oct 2017 20:53:20 +0000 (23:53 +0300)]
cli: change while to for in keyword argument processing

Using a for loop makes it easier to use continue, in preparation for
future changes. No functional changes.

3 years agocli: refactor boolean argument processing
Jani Nikula [Sun, 1 Oct 2017 20:53:19 +0000 (23:53 +0300)]
cli: refactor boolean argument processing

Clean up the control flow to prepare for future changes. No functional

3 years agocli: use notmuch_bool_t for boolean argument in show
Jani Nikula [Sun, 1 Oct 2017 20:53:18 +0000 (23:53 +0300)]
cli: use notmuch_bool_t for boolean argument in show

Pedantically correct, although they're the same underlying type.

3 years agohex-xcode: use notmuch_bool_t for boolean arguments
Jani Nikula [Sun, 1 Oct 2017 20:53:17 +0000 (23:53 +0300)]
hex-xcode: use notmuch_bool_t for boolean arguments

Pedantically correct, although they're the same underlying type.

3 years agocli: use the arg parser .present feature to handle show --entire-thread
Jani Nikula [Sun, 1 Oct 2017 20:53:16 +0000 (23:53 +0300)]
cli: use the arg parser .present feature to handle show --entire-thread

The --entire-thread default depends on other arguments, so we'll have
to figure out if it was explicitly set by the user or not. The arg
parser .present feature helps us clean up the code here.

3 years agotest: expand argument parsing tests
Jani Nikula [Sun, 1 Oct 2017 20:53:15 +0000 (23:53 +0300)]
test: expand argument parsing tests

Test and use the new .present field, only output the parameters
given. Test space between parameter name and value.

3 years agocli: add .present field to opt desc to check if the arg was present
Jani Nikula [Sun, 1 Oct 2017 20:53:14 +0000 (23:53 +0300)]
cli: add .present field to opt desc to check if the arg was present

Add pointer to boolean .present field to opt desc, which (if non-NULL)
will be set to TRUE if the argument in question is present on the
command line. Unchanged otherwise.

3 years agotest: add opt_inherit to arg-test
Jani Nikula [Sun, 1 Oct 2017 20:53:13 +0000 (23:53 +0300)]
test: add opt_inherit to arg-test

Just split the arguments to two opt desc arrays.

3 years agotest: add boolean argument to arg-test
Jani Nikula [Sun, 1 Oct 2017 20:53:12 +0000 (23:53 +0300)]
test: add boolean argument to arg-test

Surprisingly it's not there.

3 years agocli: use designated initializers for opt desc
Jani Nikula [Sun, 1 Oct 2017 20:53:11 +0000 (23:53 +0300)]
cli: use designated initializers for opt desc

Several changes at once, just to not have to change the same lines
several times over:

- Use designated initializers to initialize opt desc arrays.

- Only initialize the needed fields.

- Remove arg_id (short options) as unused.

- Replace opt_type and output_var with several type safe output
  variables, where the output variable being non-NULL determines the
  type. Introduce checks to ensure only one is set. The downside is
  some waste of const space per argument; this could be saved by
  retaining opt_type and using a union, but that's still pretty

- Fix some variables due to the type safety. Mostly a good thing, but
  leads to some enums being changed to ints. This is pedantically
  correct, but somewhat annoying. We could also cast, but that defeats
  the purpose a bit.

- Terminate the opt desc arrays using {}.

The output variable type safety and the ability to add new fields for
just some output types or arguments are the big wins. For example, if
we wanted to add a variable to set when the argument is present, we
could do so for just the arguments that need it.

Beauty is in the eye of the beholder, but I think this looks nice when
defining the arguments, and reduces some of the verbosity we have

3 years agocli: strip trailing "/" from the final maildir path in notmuch insert
Jani Nikula [Sun, 1 Oct 2017 20:53:10 +0000 (23:53 +0300)]
cli: strip trailing "/" from the final maildir path in notmuch insert

Several subtle interconnected changes here:

- If the folder name passed as argument is the empty string "" or
  slash "/", the final maildir path would end up having "//" in it. We
  should strip the final maildir path, not folder.

- The folder variable should really be const char *, another reason
  not to modify it.

- The maildir variable is only const to let us point it at db_path

To be able to strip the maildir variable, always allocate it. Default
folder to the empty string "", and don't treat folder not being
present on the command line as anything special.

As a side effect, we also create the cur/new/tmp in the top level
directory if they're not there and --create-folder is given.

3 years agocli/new: ignore special directories also in pass 2
Jani Nikula [Fri, 1 Sep 2017 15:53:09 +0000 (18:53 +0300)]
cli/new: ignore special directories also in pass 2

Avoid passing . and .. to ignore check. We also don't need to check
their dirent type either.

3 years agocli/new: check for special directories earlier in pass 1
Jani Nikula [Fri, 1 Sep 2017 15:53:08 +0000 (18:53 +0300)]
cli/new: check for special directories earlier in pass 1

Avoid passing . and .. to ignore check. We don't need to check their
dirent type either.

3 years agodevel: add script to test out-of-tree builds
Jani Nikula [Mon, 11 Sep 2017 17:17:47 +0000 (20:17 +0300)]
devel: add script to test out-of-tree builds

Something I used for 'git bisect run', but we should really add this
as part of our process.

3 years agoT390-python: add test for get_message_parts and special characters
Florian Klink [Sun, 24 Sep 2017 12:36:12 +0000 (14:36 +0200)]
T390-python: add test for get_message_parts and special characters

This imports a message with ISO-8859-2 encoded characters, then opens
the database using the python bindings. We peek through all mesage
parts, afterwards print the message id.

Signed-off-by: Florian Klink <>
Signed-off-by: Andreas Rammhold <>
3 years agopython: open messages in binary mode
Florian Klink [Sun, 24 Sep 2017 12:36:11 +0000 (14:36 +0200)]
python: open messages in binary mode

currently, notmuch's get_message_parts() opens the file in text mode and passes
the file object to email.message_from_file(fp). In case the email contains
UTF-8 characters, reading might fail inside email.parser with the following exception:

  File "/usr/lib/python3.6/site-packages/notmuch/", line 591, in get_message_parts
    email_msg = email.message_from_binary_file(fp)
  File "/usr/lib/python3.6/email/", line 62, in message_from_binary_file
    return BytesParser(*args, **kws).parse(fp)
  File "/usr/lib/python3.6/email/", line 110, in parse
    return self.parser.parse(fp, headersonly)
  File "/usr/lib/python3.6/email/", line 54, in parse
    data =
  File "/usr/lib/python3.6/", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe4 in position 1865: invalid continuation byte

To fix this, read file in binary mode and pass to

Unfortunately, Python 2 doesn't support
email.message_from_binary_file(fp), so keep using
email.message_from_file(fp) there.

Signed-off-by: Florian Klink <>
3 years agodoc: fix typos
Jakub Wilk [Tue, 26 Sep 2017 17:23:09 +0000 (19:23 +0200)]
doc: fix typos

3 years agoemacs: sanitize subject in replies
Jani Nikula [Tue, 26 Sep 2017 18:26:08 +0000 (21:26 +0300)]
emacs: sanitize subject in replies

Commit a7964c86d125 ("emacs: Sanitize authors and subjects in search
and show") added sanitization of header information for display. Do
the same for reply subjects.

This fixes the long-standing annoying artefact of certain versions of
mailman using tab as folding whitespace, leading to tabs in reply

3 years agotest: add emacs reply test for subjects with TAB
Jani Nikula [Tue, 26 Sep 2017 18:26:07 +0000 (21:26 +0300)]
test: add emacs reply test for subjects with TAB

Expect TABs to be sanitized from the subject line. Known broken.

3 years agofix reference to notmuch_message_get_properties
Daniel Kahn Gillmor [Sat, 23 Sep 2017 14:46:13 +0000 (10:46 -0400)]
fix reference to notmuch_message_get_properties

3 years agolib: index the content-type of the parts of encrypted messages
Daniel Kahn Gillmor [Sat, 16 Sep 2017 14:59:05 +0000 (17:59 +0300)]
lib: index the content-type of the parts of encrypted messages

This is a logical followup to "lib: index the content type of
signature parts", which will make it easier to record the message
structure of all messages.

3 years agolib: index the content type of signature parts
Jani Nikula [Sat, 16 Sep 2017 14:59:04 +0000 (17:59 +0300)]
lib: index the content type of signature parts

It's useful (*) to be able to easily find messages with certain types
of signatures. Having the mimetype: prefix searches fail for some
content types is also genuinely surprising (*). Index the content type
of signature parts.

While at it, switch to the gmime convenience constants for content and
signature part indexes.

*) At least for developers of email software!

3 years agotest: signed and encrypted part content type indexing
Jani Nikula [Sat, 16 Sep 2017 14:59:03 +0000 (17:59 +0300)]
test: signed and encrypted part content type indexing

Add known broken subtests for searching signed and encrypted messages
using mimetype: prefix search for the content-types of signed and
encrypted parts.

3 years agolib: abstract content type indexing
Jani Nikula [Sat, 16 Sep 2017 14:59:02 +0000 (17:59 +0300)]
lib: abstract content type indexing

Make the follow-up change of indexing signature content types
easier. No functional changes.

3 years agodebian: update gitignore
David Bremner [Sun, 17 Sep 2017 18:53:15 +0000 (15:53 -0300)]
debian: update gitignore

elpa-notmuch is a new binary package, notmuch-dbg is no longer generated.

3 years agocli/new: abstract special directory check
Jani Nikula [Fri, 1 Sep 2017 15:53:07 +0000 (18:53 +0300)]
cli/new: abstract special directory check

Add an abstraction for . and .. directory checks. No functional

3 years agocli/new: use the same style for fs entry loops
Jani Nikula [Fri, 1 Sep 2017 15:53:06 +0000 (18:53 +0300)]
cli/new: use the same style for fs entry loops

Just to please the eyes. No functional changes.

3 years agobuild: fix out-of-tree builds, again
Jani Nikula [Sun, 10 Sep 2017 11:56:16 +0000 (14:56 +0300)]
build: fix out-of-tree builds, again

Broken, again, by yours truly in bc11759dd1fd ("build: switch to
hiding libnotmuch symbols by default"). Reference notmuch.sym via

3 years agoemacs/address: use member instead of memq to check for pair
David Bremner [Wed, 13 Sep 2017 01:17:32 +0000 (22:17 -0300)]
emacs/address: use member instead of memq to check for pair

Quoting from the elisp reference:

     For other types (e.g., lists, vectors, strings), two arguments
     with the same contents or elements are not necessarily ‘eq’ to
     each other.

Thanks to "Attic Hermit" for the fix.

3 years agopython: deprecated add_message calls index_file correctly and returns result
Gaute Hope [Wed, 30 Aug 2017 08:16:33 +0000 (10:16 +0200)]
python: deprecated add_message calls index_file correctly and returns result

The deprecated Database.add_message now calls the new index_file with
correct number of arguments (without an extra `self`), and returns the
tuple from index_file - as it used to do before.

This change also adds a DeprecationWarning to the function.

3 years agoMerge tag '0.25.1'
David Bremner [Tue, 12 Sep 2017 01:32:00 +0000 (22:32 -0300)]
Merge tag '0.25.1'

notmuch 0.25.1 release (bugfix for emacs bug 28350)

3 years agodebian: changelog stanza for 0.25.1-1 0.25.1
David Bremner [Tue, 12 Sep 2017 01:22:22 +0000 (22:22 -0300)]
debian: changelog stanza for 0.25.1-1

3 years agoNEWS: news entry for 0.25.1
David Bremner [Tue, 12 Sep 2017 01:20:26 +0000 (22:20 -0300)]
NEWS: news entry for 0.25.1

3 years agoversion: bump to 0.25.1
David Bremner [Tue, 12 Sep 2017 01:19:46 +0000 (22:19 -0300)]
version: bump to 0.25.1

3 years agoemacs: override enriched-decode-display-prop for text/enriched display
Jani Nikula [Mon, 11 Sep 2017 20:09:49 +0000 (23:09 +0300)]
emacs: override enriched-decode-display-prop for text/enriched display

Switch to a local version of enriched-decode-display-prop if we
encounter a text/enriched part. This is to mitigate Normally it would be prudent to remove the
override afterwards, but in this case just leave it in.

Notes from db:
      This doesn't disable text/enriched, just one feature of it.

3 years agofix documentation bug (leading quotes break documentation)
Daniel Kahn Gillmor [Tue, 5 Sep 2017 13:21:00 +0000 (09:21 -0400)]
fix documentation bug (leading quotes break documentation)

3 years agotest/duplicate-mid: check for subject with notmuch-show
David Bremner [Sun, 27 Aug 2017 23:58:23 +0000 (20:58 -0300)]
test/duplicate-mid: check for subject with notmuch-show

In [1] Mark showed that the the current code (d7a49e81) is not
consistent in it's handling of subjects of messages with duplicate
message-ids (or in notmuch-speak, of messages with multiple files).
notmuch-search uses indexing order and explicitedly preserves the
first. notmuch-show (apparently) uses alphabetical (or at least xapian
term order) of filenames. In a perfect world we would probably report
all subjects in the json output; at the very least we should be


3 years agolib: enforce that n_message_reindex takes headers from first file
David Bremner [Sun, 27 Aug 2017 23:58:22 +0000 (20:58 -0300)]
lib: enforce that n_message_reindex takes headers from first file

This is still a bit stopgap to be only choosing one set of headers,
but this seems like a more defensible set of headers to choose.

3 years agotest: known broken test for subject after reindexing
David Bremner [Sun, 27 Aug 2017 23:58:21 +0000 (20:58 -0300)]
test: known broken test for subject after reindexing

In [1], Mark gave a test that was behaving strangly. This turns out to
be specific to reindexing.  I suppose one could argue that picking the
lexicographically last file name is a defensible choice, but it's
almost as easy to take the first, which seems more intuitive. So mark
the current situation as broken.


3 years agotest/duplicate-mid: clarify index order vs filename order
David Bremner [Sun, 27 Aug 2017 23:58:20 +0000 (20:58 -0300)]
test/duplicate-mid: clarify index order vs filename order

The existing test for notmuch search had the first in filename order
the same as the first indexed, which made it harder to understand what
the underlying behaviour is. Add a file with a lexicographically
smaller name, but later index time to clarify this.

3 years agotest: make fallback to duplicate test more robust.
David Bremner [Sun, 27 Aug 2017 23:58:19 +0000 (20:58 -0300)]
test: make fallback to duplicate test more robust.

The original intent of this test was to verify that notmuch show was
not crashing when the first file (where headers are being read from)
was deleted. Run the output through some sanitization so that as we
add and delete copies we don't have to update this test.

3 years agoemacs: Refuse requests to refresh tree views while a refresh is running
Vladimir Panteleev [Mon, 14 Aug 2017 07:08:36 +0000 (07:08 +0000)]
emacs: Refuse requests to refresh tree views while a refresh is running

notmuch-tree did not protect against concurrent refreshes like
notmuch-search, meaning, hitting '=' (notmuch-refresh-this-buffer)
quickly will spawn multiple parallel notmuch processes, and clobber
the existing results in the current buffer.

* notmuch-tree.el: Add a guard to notmuch-tree-refresh-view similar to
  the one in notmuch-search.

3 years agolib&cli: use g_object_new instead of g_object_newv
David Bremner [Sun, 3 Sep 2017 11:55:42 +0000 (08:55 -0300)]
lib&cli: use g_object_new instead of g_object_newv

'g_object_newv' is deprecated, and prints annoying warnings. The
warnings suggest using 'g_object_new_with_properties', but that's only
available since glib 2.55 (i.e. a month ago as of this writing).
Since we don't actuall pass any properties, it seems we can just call

3 years agotest: notmuch_drop_mail_headers() style update
Tomi Ollila [Sun, 3 Sep 2017 20:24:55 +0000 (23:24 +0300)]
test: notmuch_drop_mail_headers() style update

Changed "" quotes to '' as we're not supposed to dynamically
alter python program (via shell $variable expansion).

Added space to python program to match general python style.

Replaced $* with 'idiomatic' "$@" to serve as better example.

3 years agotest/crypto: remove headers more robustly
David Bremner [Fri, 1 Sep 2017 23:59:47 +0000 (20:59 -0300)]
test/crypto: remove headers more robustly

In [1], Vladimir Panteleev observed that the In-Reply-To and
References headers could be wrapped in the 'default' output format of
notmuch-reply, depending on the version of Emacs creating the
message. In my own experiments notmuch-reply sometimes wraps headers
with only one message-id if that message-id is long enough. However it
happens, this causes the previous approach using grep to fail.

Since I found the proposed unwrapping shell fragment in [1] a bit hard
to follow, I decided to write a little python script instead. Then
Tomi suggested a slight generalization of my script, and here we are.


3 years agobuild: fix unbound variable in configure
Jan Malakhovski [Thu, 31 Aug 2017 11:46:34 +0000 (11:46 +0000)]
build: fix unbound variable in configure

Commentary by db:

This missing initialization caused configure to crash, and hence the
build to fail in environments without cppcheck.

3 years agogitignore: add .stamps
David Bremner [Wed, 30 Aug 2017 23:14:43 +0000 (20:14 -0300)]
gitignore: add .stamps

3 years ago.travis.yml: Switch to "sudo: false" for faster builds
Vladimir Panteleev [Thu, 17 Aug 2017 17:51:43 +0000 (17:51 +0000)]
.travis.yml: Switch to "sudo: false" for faster builds

Builds not requiring sudo access run in a container, which will have
better performance and less overhead on the Travis infrastructure.

Use the apt addon to install dependencies instead of explicit apt-get

3 years agotest: Fix on some Travis CI machines
Vladimir Panteleev [Thu, 17 Aug 2017 17:51:42 +0000 (17:51 +0000)]
test: Fix on some Travis CI machines

On some system configurations, setting a breakpoint on the "add_file"
function then issuing "continue" in gdb causes the debugger to
seemingly jump over the add_file invocation. This results in a test
failure, as the "Handle files vanishing between scandir and add_file"
subtest expects add_file to be called and fail due to the vanishing
file. The compiler optimization level also plays a role - the problem
can be reproduced with CFLAGS having -O2 but not -Og.

This problem was observed manifesting as a test failure on Travis CI
configured with "dist: trusty" and "sudo: false". It was not
reproducible on a local Docker image of Travis' runtime environment,
so Travis' virtualization infrastructure likely plays a role as well.

* Breakpoint notmuch_database_add_message instead of
  add_file to the same effect, and avoid bad gdb behaviour on Travis

Amended by db:


Somehow the wrapper function doesn't work as a breakpoint; perhaps due
to inlining.

3 years ago.travis.yml: Replace manual zlib installation with "dist: trusty"
Vladimir Panteleev [Thu, 17 Aug 2017 17:51:41 +0000 (17:51 +0000)]
.travis.yml: Replace manual zlib installation with "dist: trusty"

Travis now offers Ubuntu Trusty (14.04 LTS) VMs as test runners, which
is gradually becoming the default. We can opt in to using Trusty now
so that we no longer need to manually update zlib to a newer version.

3 years ago.travis.yml: Add gdb and gpgsm dependencies
Vladimir Panteleev [Thu, 17 Aug 2017 17:51:40 +0000 (17:51 +0000)]
.travis.yml: Add gdb and gpgsm dependencies

This allows running more tests which were previously skipped due to
missing dependencies.

3 years ago.travis.yml: Invoke `make download-test-databases' before running tests
Vladimir Panteleev [Thu, 17 Aug 2017 17:51:39 +0000 (17:51 +0000)]
.travis.yml: Invoke `make download-test-databases' before running tests

Download the test message database used for the test.

If the additional load on the web server is undesired, Travis can be
instructed to cache the file.

3 years agotest/smtp-dummy: convert to 'goto DONE' style
David Bremner [Sat, 26 Aug 2017 14:41:41 +0000 (11:41 -0300)]
test/smtp-dummy: convert to 'goto DONE' style

Clean up several cppcheck warnings of the form

      - test/smtp-dummy.c:170: error: Resource leak: output

Conform to overall notmuch code style.

3 years agotest/smtp-dummy: uncrustify
David Bremner [Sat, 26 Aug 2017 14:41:40 +0000 (11:41 -0300)]
test/smtp-dummy: uncrustify

For some reason lost in the mists of time this code was indented 8 spaces.

3 years agocppcheck: call va_end in _internal_error
David Bremner [Sat, 26 Aug 2017 14:41:39 +0000 (11:41 -0300)]
cppcheck: call va_end in _internal_error

fix for:
    util/error_util.c:38: error: va_list 'va_args' was opened but not
    closed by va_end()

This makes the code more copy-pastable, if nothing else

3 years agocppcheck: close files during shutdown
David Bremner [Sat, 26 Aug 2017 14:41:38 +0000 (11:41 -0300)]
cppcheck: close files during shutdown

Fix the following cppcheck errors:

    notmuch-count.c:207: error: Resource leak: input
    notmuch-tag.c:238: error: Resource leak: input

We know that the program is shutting down here, but it does no harm to
clean up a bit.