notmuch.git
10 years agonmbug-status: replace __values__() with values() in OrderedDict stub
Tomi Ollila [Tue, 18 Feb 2014 18:34:52 +0000 (20:34 +0200)]
nmbug-status: replace __values__() with values() in OrderedDict stub

Python dict() object does not have __values__() function which
OrderedDict().values() (the stub provided in nmbug-status) could call
to provide ordered list of values. By renaming this thinko to
values() will make our stub work as expected -- dict items listed out
in order those were added to the dictionary.

10 years agoemacs: Avoid rebuilding .eldeps even when there's nothing to do
Austin Clements [Thu, 20 Feb 2014 04:24:24 +0000 (23:24 -0500)]
emacs: Avoid rebuilding .eldeps even when there's nothing to do

Previously, we updated .eldeps only if the file contents actually
needed to change.  This was done to avoid unnecessary make restarts
(if the .eldeps rule changes the mtime of .eldeps, make has to restart
to collect the new dependencies).  However, this meant that, after a
modification to any .el file that did not change dependencies, .eldeps
would always be out of date, so every make invocation would run the
.eldeps rule, which is both expensive because it starts up Emacs and
noisy.  This was true even when there was nothing to do.  E.g.,

$ make clean && make
...
$ touch emacs/notmuch-lib.el && make
...
$ make
Use "make V=1" to see the verbose compile lines.
EMACS emacs/.eldeps
make: Nothing to be done for `all'.
$ make
Use "make V=1" to see the verbose compile lines.
EMACS emacs/.eldeps
make: Nothing to be done for `all'.

Fix this by replacing .eldeps with two files with identical content.
One tracks the mtime of the dependency information and triggers the
Emacs call to rebuild dependencies only when it may be necessary.  The
other tracks the content only; this rule over-triggers in the same way
the old rule did, but this rule is cheap and quiet.

10 years agoMerge tag 'debian/0.17-4'
David Bremner [Sat, 22 Feb 2014 01:05:05 +0000 (21:05 -0400)]
Merge tag 'debian/0.17-4'

uploaded to Debian unstable

10 years agochangelog stanza for 0.17-4 debian/0.17-4
David Bremner [Wed, 19 Feb 2014 01:38:55 +0000 (21:38 -0400)]
changelog stanza for 0.17-4

10 years agodebian: update ruby binary extension install path
David Bremner [Wed, 19 Feb 2014 01:05:14 +0000 (21:05 -0400)]
debian:  update ruby binary extension install path

From Christian Hofstaedler, Debian bug 739120:

When ruby-defaults > 1:2.0 will be uploaded to sid, the version of
Ruby provided by the 'ruby' and 'ruby-dev' packages will change to
version 2.0.  This version change includes a change to the path for
binary extensions.

This patch works for Ruby 1.9.1 as well as Ruby 2.0, so it's safe to
apply now.

10 years agoemacs: update alist for mail-archive.com API change
Jed Brown [Thu, 13 Feb 2014 15:04:22 +0000 (08:04 -0700)]
emacs: update alist for mail-archive.com API change

Searching by Message-Id no longer works via the old mail-archive.com
API, though I have contacted them in hopes that they restore it to
prevent dead links.  Anyway, the new API is cleaner.

Acked-by: Austin Clements <amdragon@MIT.EDU>
10 years agonmbug-status: Hardcode UTF-8 instead of using the user's locale
W. Trevor King [Fri, 14 Feb 2014 16:48:55 +0000 (08:48 -0800)]
nmbug-status: Hardcode UTF-8 instead of using the user's locale

David [1] and Tomi [2] both feel that the user's choice of LANG is not
explicit enough to have such a strong effect on nmbug-status.  For
example, cron jobs usually default to LANG=C, and that is going to
give you ASCII output:

  $ LANG=C python -c 'import locale; print(locale.getpreferredencoding())'
  ANSI_X3.4-1968

Trying to print Unicode author names (and other strings) in that
encoding would crash nmbug-status with a UnicodeEncodeError.  To avoid
that, this patch hardcodes UTF-8, which can handle generic Unicode,
and is the preferred encoding (regardless of LANG settings) for
everyone who has chimed in on the list so far.  I'd prefer trusting
LANG, but in the absence of any users that prefer non-UTF-8 encodings
I'm fine with this approach.

While we could achieve the same effect on the output content by
dropping the previous patch (nmbug-status: Encode output using the
user's locale), Tomi also wanted UTF-8 hardcoded as the config-file
encoding [2].  Keeping the output encoding patch and then adding this
to hardcode both the config-file and output encodings at once seems
the easiest route, now that fd29d3f (nmbug-status: Decode Popen output
using the user's locale, 2014-02-10) has landed in master.

[1]: id="877g8z4v4x.fsf@zancas.localnet"
     http://article.gmane.org/gmane.mail.notmuch.general/17202
[2]: id="m2vbwj79lu.fsf@guru.guru-group.fi"
     http://article.gmane.org/gmane.mail.notmuch.general/17209

10 years agonmbug-status: Encode output using the user's locale
W. Trevor King [Fri, 14 Feb 2014 16:48:54 +0000 (08:48 -0800)]
nmbug-status: Encode output using the user's locale

Instead of always writing UTF-8, allow the user to configure the
output encoding using their locale.  This is useful for previewing
output in the terminal, for poor souls that don't use UTF-8 locales
;).

10 years agonmbug-status: Add inter-message padding
W. Trevor King [Fri, 14 Feb 2014 16:48:53 +0000 (08:48 -0800)]
nmbug-status: Add inter-message padding

We already had the tbody with a blank row separating threads (which is
not colored); this commit adds a bit of spacing to separate messages
within a thread.  It will also add a bit of colored padding above the
first message and below the final message, but the main goal is to add
padding *between* two-row message blocks.

                                               <--- new padding
  thread-1, message-1, row-1  (class="message-first")
  thread-1, message-1, row-2  (class="message-last")
                                               <--- new padding
    spacer tbody with a blank row
                                               <--- new padding
  thread-2, message-1, row-1  (class="message-first")
  thread-2, message-1, row-2  (class="message-last")
                                               <--- new padding
                                               <--- new padding
  thread-2, message-2, row-1  (class="message-first")
  thread-2, message-2, row-2  (class="message-last")
                                               <--- new padding

10 years agonmbug-status: Color threads in HTML output
W. Trevor King [Fri, 14 Feb 2014 16:48:52 +0000 (08:48 -0800)]
nmbug-status: Color threads in HTML output

Add tbody sections so we don't have to color every row.  Multiple
tbody sections are allowed [1].  Use CSS 3's nth-child to handle
even/odd coloring (skipping the spacer rows) [2], which is supported
on the major browsers [3].

border-spacing is from CCS 2.1 [4,5].  I'm using it to avoid
whitespace between td cells.

border-radius is from CCS 3 [6,7].  I'm using it to make the colored
sections a bit less harsh.  I tried adding rounded borders to the
tbody itself doesn't work, but I couldn't get that to work without
setting the tbody's display to 'block'.  That rounded the corners, but
collapsed the cell spacing (e.g. columns were no longer aligned).
This commit's by-corner-td approach is not particularly elegant, but
it works.  The td padding entries just ensure that the cell body is
suitably far from the edges that it doesn't fall outside of the
rounded corners.

The doubled-braces are escapes from Python's str.format.

[1]: http://www.w3.org/TR/html5/tabular-data.html#the-table-element
[2]: http://www.w3.org/TR/css3-selectors/#nth-child-pseudo
[3]: https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-child#Browser_compatibility
[4]: http://www.w3.org/TR/CSS2/tables.html#propdef-border-spacing
[5]: https://developer.mozilla.org/en-US/docs/Web/CSS/border-spacing#Browser_compatibility
[6]: http://www.w3.org/TR/css3-background/#the-border-radius
[7]: https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius#Browser_compatibility

10 years agonew: Detect dirent.d_type support at configure time
Austin Clements [Thu, 13 Feb 2014 06:50:59 +0000 (01:50 -0500)]
new: Detect dirent.d_type support at configure time

Support for dirent.d_type is OS-specific.  Previously, we used
_DIRENT_HAVE_D_TYPE to detect support for this, but this is apparently
a glic-ism (FreeBSD, for example, supports d_type, but does not define
this).  Since there's no cross-platform way to detect support for
dirent.d_type, detect it using a test compile at configure time.

10 years agonmbug-status: Escape &, <, and > in HTML display data
W. Trevor King [Thu, 13 Feb 2014 16:47:20 +0000 (08:47 -0800)]
nmbug-status: Escape &, <, and > in HTML display data

'message-id' and 'from' now have sensitive characters escaped using
xml.sax.saxutils.escape [1].  The 'subject' data was already being
converted to a link into Gmane; I've escape()d that too, so it doesn't
need to be handled ain the same block as 'message-id' and 'from'.

This prevents broken HTML by if subjects etc. contain characters that
would otherwise be interpreted as HTML markup.

[1]: http://docs.python.org/3/library/xml.sax.utils.html#xml.sax.saxutils.escape

10 years agonmbug-status: Use <code> and <p> markup where appropriate
W. Trevor King [Thu, 13 Feb 2014 16:47:18 +0000 (08:47 -0800)]
nmbug-status: Use <code> and <p> markup where appropriate

* Wrap free text in <p> tags.
* Convert <blockquote> to <p><code> for query strings.
* Wrap message-id-term (id:"...") in <code>.

The <code> tags get nicer default markup (smaller monospace font) for
notmuch query terms [1].  The <p> tags don't have much effect without
attached CSS, but bare text (phrasing content [2]) in <body> (which
expects flow content [3,4]) feels wrong.

[1]: http://www.w3.org/TR/html5/text-level-semantics.html#the-code-element
[2]: http://www.w3.org/TR/html5/dom.html#phrasing-content-1
[3]: http://www.w3.org/TR/html5/dom.html#flow-content-1
[4]: http://www.w3.org/TR/html5/sections.html#the-body-element

10 years agonmbug-status: Slug the title when using it as an id
W. Trevor King [Thu, 13 Feb 2014 16:47:17 +0000 (08:47 -0800)]
nmbug-status: Slug the title when using it as an id

Also allow manual id overrides from the JSON config.  Sluggin avoids
errors like:

   Bad value '#Possible bugs' for attribute href on element a:
   Whitespace in fragment component. Use %20 in place of spaces.

from http://validator.w3.org.

I tried just quoting the titles (e.g. 'Possible%20bugs'), but that
didn't work (at least with Firefox 24.2.0).  Slugging avoids any
ambiguity over when the quotes are expanded in the client.  The specs
are unclear about quoting, saying only [1]:

  Value: Any string, with the following restrictions:

    must be at least one character long
    must not contain any space characters

[1]: http://dev.w3.org/html5/markup/global-attributes.html#common.attrs.id

10 years agonmbug-status: Anchor with h3 ids instead of a names
W. Trevor King [Thu, 13 Feb 2014 16:47:16 +0000 (08:47 -0800)]
nmbug-status: Anchor with h3 ids instead of a names

HTML 5 allows id attributes on all HTML elements [1], but restricts
names to particular cases [2].  Attaching the id attribute to the h3
element allows us to drop the anchor a element altogether.

[1]: http://www.w3.org/TR/html5/dom.html#the-id-attribute
[2]: http://www.w3.org/TR/html5/index.html#attributes-1

10 years agodoc: notmuch_result_move_to_next -> notmuch_tags_move_to_next
Gaute Hope [Sun, 9 Feb 2014 10:50:48 +0000 (11:50 +0100)]
doc: notmuch_result_move_to_next -> notmuch_tags_move_to_next

Fix typo in docs.

10 years agonmbug-status: Convert from XHTML 1.0 to HTML 5
W. Trevor King [Mon, 10 Feb 2014 18:40:34 +0000 (10:40 -0800)]
nmbug-status: Convert from XHTML 1.0 to HTML 5

HTML 5 for the win :).  I also de-namespaced the language; the HTML 5
spec allows a vestigial xml:lang attribute, but it's a no-op [1], so I
stripped it.

This shouldn't break anything at tethera, which already serves the
status as text/html:

  $ wget -S http://nmbug.tethera.net/status/
  --2014-02-02 21:20:39--  http://nmbug.tethera.net/status/
  Resolving nmbug.tethera.net... 87.98.215.224
  Connecting to nmbug.tethera.net|87.98.215.224|:80... connected.
  HTTP request sent, awaiting response...
    HTTP/1.1 200 OK
    Vary: Accept-Encoding
    Content-Type: text/html
  ...

This also matches the Content-Type in the generated HTML's http-equiv
meta.

[1]: http://www.w3.org/TR/html5/dom.html#the-lang-and-xml:lang-attributes

10 years agonmbug-status: Normalize table HTML indentation
W. Trevor King [Mon, 10 Feb 2014 18:40:33 +0000 (10:40 -0800)]
nmbug-status: Normalize table HTML indentation

I don't think I've ever seen '</td><td>{value}\n' before :p.  The new
formatting avoids mixing tag levels and content across lines.

10 years agonmbug-status: Add an OrderedDict stub for Python 2.6
W. Trevor King [Mon, 10 Feb 2014 18:40:32 +0000 (10:40 -0800)]
nmbug-status: Add an OrderedDict stub for Python 2.6

Tomi Ollila and David Bremner (and presumably others) are running
Python 2.6 on their nmbug-status boxes, so it makes sense to keep
support for that version.  This commit adds a really minimal
OrderedDict stub (e.g. it doesn't handle key removal), but it gets the
job done for Page._get_threads.  Once we reach a point where Python
2.6 is no longer important (it's already out of it's security-fix
window [1]), we can pull this stub back out.

[1]: http://www.python.org/download/releases/2.6.9/

10 years agonmbug-status: Add Page and HtmlPage for modular rendering
W. Trevor King [Mon, 10 Feb 2014 18:40:31 +0000 (10:40 -0800)]
nmbug-status: Add Page and HtmlPage for modular rendering

I was having trouble understanding the logic of the longish print_view
function, so I refactored the output generation into modular bits.
The basic text rendering is handled by Page, which has enough hooks
that HtmlPage can borrow the logic and slot-in HTML generators.

By modularizing the logic it should also be easier to build other
renderers if folks want to customize the layout for other projects.

Timezones
=========

This commit has not effect on the output, except that some dates have
been converted from the sender's timezone to UTC due to:

  -            val = m.get_header(header)
  -            ...
  -            if header == 'date':
  -                val = str.join(' ', val.split(None)[1:4])
  -                val = str(datetime.datetime.strptime(val, '%d %b %Y').date())
  ...
  +                value = str(datetime.datetime.utcfromtimestamp(
  +                    message.get_date()).date())

I also tweaked the HTML header date to be utcnow instead of the local
now() to make all times independent of the generator's local time.
This matches Gmane, which converts all Date headers to UTC (although
they use a 'GMT' suffix).  Notmuch uses
g_mime_utils_header_decode_date to calculate the UTC timestamps, but
uses a NULL tz_offset which drops the information we'd need to get
back to the sender's local time [1].  With the generator's local time
arbitrarily different from the sender's and viewer's local time,
sticking with UTC seems the best bet.

[1]: https://developer.gnome.org/gmime/stable/gmime-gmime-utils.html#g-mime-utils-header-decode-date

10 years agonmbug-status: Add a Python-3-compatible urllib.parse.quote import
W. Trevor King [Mon, 10 Feb 2014 18:40:30 +0000 (10:40 -0800)]
nmbug-status: Add a Python-3-compatible urllib.parse.quote import

Python 2's urllib.quote [1] has moved to urllib.parse.quote in Python
3 [2].

[1]: http://docs.python.org/2/library/urllib.html#urllib.quote
[2]: http://docs.python.org/3/library/urllib.parse.html#urllib.parse.quote

10 years agonmbug-status: Consolidate HTML header printing
W. Trevor King [Mon, 10 Feb 2014 18:40:29 +0000 (10:40 -0800)]
nmbug-status: Consolidate HTML header printing

Make this all one big string, using '...{date}...'.format(date=...) to
inject the date [1].  This syntax was added in Python 2.6, and is
preferred to %-formatting in Python 3 [1].

[1]: http://docs.python.org/2/library/stdtypes.html#str.format

10 years agonmbug-status: Don't require write access
W. Trevor King [Mon, 10 Feb 2014 18:40:28 +0000 (10:40 -0800)]
nmbug-status: Don't require write access

The database in only used for notmuch.Query, so there's no need for
write access.  This allows nmbug-status to run while the database is
being updated, without raising:

  A Xapian exception occurred opening database: Unable to get write lock on …: already locked
  Traceback (most recent call last):
    File "./nmbug-status", line 182, in <module>
      db = notmuch.Database(mode=notmuch.Database.MODE.READ_WRITE)
    File "/…/notmuch/database.py", line 154, in __init__
      self.open(path, mode)
    File "/…/notmuch/database.py", line 214, in open
      raise NotmuchError(status)
  notmuch.errors.XapianError

10 years agonmbug-status: Consolidate functions and main code
W. Trevor King [Mon, 10 Feb 2014 18:40:27 +0000 (10:40 -0800)]
nmbug-status: Consolidate functions and main code

The definitions of Thread, output_with_separator, and print_view were
between the main argparse and view-printing code.  Group them together
with our existing read_config at the top of the module, which makes
for easier reading in the main section.

I also:

* Made 'headers' a print_view argument instead of a module-level
  global.  The list -> tuple conversion avoids having a mutable
  default argument, which makes some people jumpy ;).

* Made 'db' a print_view argument instead of relying on the global
  namespace to access it from print_view.

10 years agonmbug-status: Add metavars for --config and --get-query
W. Trevor King [Mon, 10 Feb 2014 18:40:26 +0000 (10:40 -0800)]
nmbug-status: Add metavars for --config and --get-query

Now the suggested usage (listed by 'nmbug-status --help') is:

  usage: nmbug-status [-h] [--text] [--config PATH] [--list-views]
                      [--get-query VIEW]

instead of the less obvious:

  usage: nmbug-status [-h] [--text] [--config CONFIG] [--list-views]
                      [--get-query GET_QUERY]

10 years agonmbug-status: Factor config-loading out into read_config
W. Trevor King [Mon, 10 Feb 2014 18:40:25 +0000 (10:40 -0800)]
nmbug-status: Factor config-loading out into read_config

By isolating this peripheral handling, we make the core logic of
nmbug-status easier to read.

10 years agonmbug-status: Decode Popen output using the user's locale
W. Trevor King [Mon, 10 Feb 2014 18:40:24 +0000 (10:40 -0800)]
nmbug-status: Decode Popen output using the user's locale

Avoid:

  $ ./nmbug-status --list-views
  Traceback (most recent call last):
    File "./nmbug-status", line 47, in <module>
      'cat-file', 'blob', sha1+':status-config.json'],
  TypeError: can't concat bytes to str

by explicitly converting the byte-stream read from Popen into a
Unicode string.  On Python 2, this conversion is str -> unicode; on
Python 3 it is bytes -> str.

_ENCODING is derived from the user's locale (or system default) in an
attempt to match Git's output encoding.  It may be more robust to skip
the encoding/decoding by using a Python wrapper like pygit2 [1] for
Git access.  That's a fairly heavy dependency though, and using the
locale will probably work.

[1]: http://www.pygit2.org/

10 years agonmbug-status: Use email.utils instead of rfc822
W. Trevor King [Mon, 10 Feb 2014 18:40:23 +0000 (10:40 -0800)]
nmbug-status: Use email.utils instead of rfc822

rfc822 has been deprecated since Python 2.3, and it's gone in
Python 3 [1].

[1]: http://docs.python.org/2/library/rfc822.html

10 years agonmbug-status: Convert to Python-3-compatible print functions
W. Trevor King [Mon, 10 Feb 2014 18:40:22 +0000 (10:40 -0800)]
nmbug-status: Convert to Python-3-compatible print functions

We shouldn't require folks to install Python 2 to run nmbug-status.

10 years agoemacs: initialize ido(-completing-read) in emacs 23.[123]
Tomi Ollila [Mon, 27 Jan 2014 20:23:37 +0000 (22:23 +0200)]
emacs: initialize ido(-completing-read) in emacs 23.[123]

Otherwise `ido-completing-read' will freeze after PROMPT is displayed.

10 years agocompletion: bash completion for notmuch new --quiet option
Jani Nikula [Sun, 2 Feb 2014 12:49:09 +0000 (14:49 +0200)]
completion: bash completion for notmuch new --quiet option

notmuch new now has --quiet option, complete it too.

10 years agoconfigure: only install bash completion if supported
Jani Nikula [Sun, 2 Feb 2014 16:47:57 +0000 (18:47 +0200)]
configure: only install bash completion if supported

Our bash completion depends on bash-completion 1.90 or later. Only
install where available.

10 years agoemacs: ad-activate 'mm-shr after ad-disable-advice 'mm-shr
Tomi Ollila [Mon, 27 Jan 2014 20:32:12 +0000 (22:32 +0200)]
emacs: ad-activate 'mm-shr after ad-disable-advice 'mm-shr

Imitated from "Enabling advice" in Emacs lisp manual...

ad-disable-advice by itself only changes the enable flag for a
piece of advice. To make the change take effect in the
advised definition, the advice needs to be activated again.

10 years agotest: add basic tests for notmuch new --quiet option
Jani Nikula [Sun, 26 Jan 2014 18:58:46 +0000 (20:58 +0200)]
test: add basic tests for notmuch new --quiet option

This does not cover all the possible paths notmuch new could output
stuff, but it's better than nothing.

10 years agoemacs: add notmuch-assert-cli-sane to notmuch-hello
David Bremner [Sun, 26 Jan 2014 18:44:27 +0000 (14:44 -0400)]
emacs: add notmuch-assert-cli-sane to notmuch-hello

This is meant to be the friendly entrypoint, so let's do something
better than the mangled output described in

       id:5228989D.8030607@fifthhorseman.net

10 years agoemacs: add function notmuch-assert-cli-sane
David Bremner [Sun, 26 Jan 2014 18:36:37 +0000 (14:36 -0400)]
emacs: add function notmuch-assert-cli-sane

If the CLI seems borked, signal an error, and log a suggestion for the
user about how to recover.

10 years agoemacs: add a function to heuristically test if the CLI is configured OK.
David Bremner [Sun, 26 Jan 2014 18:13:48 +0000 (14:13 -0400)]
emacs: add a function to heuristically test if the CLI is configured OK.

We cache the result so that we can call the function many places
without worrying about the cost.

10 years agoman: document notmuch new --quiet option
Jani Nikula [Sun, 19 Jan 2014 20:32:28 +0000 (22:32 +0200)]
man: document notmuch new --quiet option

10 years agocli: add --quiet option to notmuch new
Jani Nikula [Sun, 19 Jan 2014 20:32:27 +0000 (22:32 +0200)]
cli: add --quiet option to notmuch new

Tie it to --verbose (resulting in verbosity levels of quiet, normal,
and verbose) but leave --debug orthogonal. Do some drive-by cleaning
while at it.

10 years agocli: abstract notmuch new result printing
Jani Nikula [Sun, 19 Jan 2014 20:32:26 +0000 (22:32 +0200)]
cli: abstract notmuch new result printing

The notmuch_new_command() function has grown huge, chop it up a
bit. This should also be helpful when adding a --quiet option to
notmuch new. No functional changes.

10 years agocli: for loop is more customary
Jani Nikula [Sun, 19 Jan 2014 20:32:25 +0000 (22:32 +0200)]
cli: for loop is more customary

With the happy day stop condition within the while, it was
confusing. Switch to the paradigm for loop. No functional changes.

10 years agocli: use dirent_type in count_files too
Jani Nikula [Sun, 19 Jan 2014 20:32:24 +0000 (22:32 +0200)]
cli: use dirent_type in count_files too

Avoid an extra stat per file, if possible, also when counting the
files for initial indexing.

10 years agocli: only check the ignore list if needed
Jani Nikula [Sun, 19 Jan 2014 20:32:23 +0000 (22:32 +0200)]
cli: only check the ignore list if needed

Premature optimization is the root of all evil, but this is simple
enough.

10 years agocli: extract single message addition in notmuch new to clarify code
Jani Nikula [Sun, 19 Jan 2014 20:32:22 +0000 (22:32 +0200)]
cli: extract single message addition in notmuch new to clarify code

The add_files() function has grown huge, chop it up a bit. No
functional changes.

10 years agolib: update documentation for notmuch_database_get_directory
David Bremner [Sat, 25 Jan 2014 03:07:43 +0000 (23:07 -0400)]
lib: update documentation for notmuch_database_get_directory

Clarify that using the directory after destroying the corresponding
database is not permitted.

This is implicit in the description of notmuch_database_destroy, but
it doesn't hurt to be explicit, and we do express similar "ownership"
relationships at other places in the docs.

10 years agobuild: delete the default .SUFFIXES
Tomi Ollila [Sat, 25 Jan 2014 12:33:55 +0000 (14:33 +0200)]
build: delete the default .SUFFIXES

All implicit rules in notmuch Makefiles are "pattern rules"; Deleting the
default suffixes (to support obsolete, old-fashioned "suffix rules") from
make reduces the output of 'make -d' by 40 to 90 percent, helping e.g.
debugging make problems.

10 years agonotmuch-show: detect NULL pointer returned from notmuch_query_search_threads
David Bremner [Thu, 23 Jan 2014 12:24:01 +0000 (08:24 -0400)]
notmuch-show: detect NULL pointer returned from notmuch_query_search_threads

We want to return an error status, not 0 or (worse) segfault.

10 years agolib: make notmuch_threads_valid return FALSE when passed NULL
David Bremner [Thu, 23 Jan 2014 12:24:00 +0000 (08:24 -0400)]
lib: make notmuch_threads_valid return FALSE when passed NULL

Without this patch, the example code in the header docs crashes for certain
invalid queries (see id:871u00oimv.fsf@approx.mit.edu)

10 years agotest: add known broken test exit code of notmuch show
David Bremner [Thu, 23 Jan 2014 12:23:59 +0000 (08:23 -0400)]
test: add known broken test exit code of notmuch show

This test catches a segfault on a syntactically invalid query. It also
catches a problem with my initial fix, which still returned 0.

10 years agoman: update notmuch-dump man page for new default.
David Bremner [Thu, 23 Jan 2014 13:02:47 +0000 (09:02 -0400)]
man: update notmuch-dump man page for new default.

Actually the previous default was not documented explicitely.  I moved
the batch-tag section first because it seemed that the formats were
previously documented in order default, other.

10 years agonotmuch dump: default to batch-tag format.
David Bremner [Thu, 23 Jan 2014 13:02:46 +0000 (09:02 -0400)]
notmuch dump: default to batch-tag format.

Although we didn't formally deprecate the old format, the new one has
been available for a year.

10 years agocli: abstract common config get/set code
Jani Nikula [Fri, 17 Jan 2014 16:38:58 +0000 (18:38 +0200)]
cli: abstract common config get/set code

Pretty straightforward abstraction similar to get/set list.

10 years agolib: fix error handling
Tomi Valkeinen [Tue, 19 Nov 2013 05:10:31 +0000 (07:10 +0200)]
lib: fix error handling

Currently if a Xapian exception happens in notmuch_message_get_header,
the exception is not caught leading to crash. In
notmuch_message_get_date the exception is caught, but an internal error
is raised, again leading to crash.

This patch fixes the error handling by making both functions catch the
Xapian exceptions, print an error and return NULL or 0.

The 'notmuch->exception_reported' is also set, as is done elsewhere,
even if I don't really get the idea of that field.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@iki.fi>
10 years agocli: close config and do talloc report also on errors
Jani Nikula [Fri, 10 Jan 2014 21:28:54 +0000 (23:28 +0200)]
cli: close config and do talloc report also on errors

Seems like the sensible thing to do.

10 years agocli: clean up exit status code returned by the cli commands
Jani Nikula [Fri, 10 Jan 2014 21:28:53 +0000 (23:28 +0200)]
cli: clean up exit status code returned by the cli commands

Apart from the status codes for format mismatches, the non-zero exit
status codes have been arbitrary. Make the cli consistently return
either EXIT_SUCCESS or EXIT_FAILURE.

10 years agoemacs: tree: use tag-format-tags
Mark Walters [Sat, 11 Jan 2014 21:49:52 +0000 (21:49 +0000)]
emacs: tree: use tag-format-tags

Previously tree did not use tag-format-tags: since tree wants to
distinguish matching messages from non-matching messages it is not a
perfect fit.

However, in preparation for allowing tag-changes to be shown (i.e.,
added or deleted tags to be indicated) it is convenient to make all
places displaying tags call the same routines.

We modify notmuch-tag-format-tags slightly so that it can take and
argument for the default characteristics of the face before the
special tag features are applied.

This also means that things like the star symbol for flagged messages
all work in tree.

10 years agoemacs: tree: default face for matching/non-matching messages
Mark Walters [Sat, 11 Jan 2014 21:41:42 +0000 (21:41 +0000)]
emacs: tree: default face for matching/non-matching messages

This adds default faces for matching and non-matching messages. This
makes it easier for a user to do broad customization without having to
customize every field. It also fits more neatly with the next patch
which switches to using notmuch-tag-format-tags for tag formatting.

We set the field specific face customization to nil for all the fields
which use the message default face to make it clear to a user which
fields customizations are being used.

10 years agotest: leave T\d\d\d- in variable $this_test and introduce $this_test_bare
Tomi Ollila [Wed, 15 Jan 2014 19:02:03 +0000 (21:02 +0200)]
test: leave T\d\d\d- in variable $this_test and introduce $this_test_bare

Script `notmuch-test` expects the results file have T\d\d\d- part
intact so the results files (and some test output files) are now
name as such.
Without this change `notmuch-test` will exit in case the test
script it was executing exited with nonzero value.

The T\d\d\d- part is dropped in new variable $this_test_bare which is
used in progress informational messages and when loading .el files in
emacs tests (whenever $this_test_bare.el exists).

10 years agolib: fix clang compiler warning
Jani Nikula [Fri, 17 Jan 2014 16:21:05 +0000 (18:21 +0200)]
lib: fix clang compiler warning

With some combination of clang and talloc, not using the return value
of talloc_steal() produces a warning. Ignore it, as talloc_steal() has
no failure modes per documentation.

10 years agotest: add test for syntax of emacs test library
David Bremner [Sun, 12 Jan 2014 00:10:21 +0000 (20:10 -0400)]
test: add test for syntax of emacs test library

If there is a syntax error in the emacs test library, it causes other
tests to hang or crash without a useful error message.

This test could be eliminated if the error reporting for emacs tests
was somehow improved.

10 years agocli: initialize quiet variable in compact
Jani Nikula [Fri, 10 Jan 2014 20:23:09 +0000 (22:23 +0200)]
cli: initialize quiet variable in compact

Surprisingly there's no compiler warning!

10 years agotest: renamed test scripts to format T\d\d\d-name.sh
Tomi Ollila [Thu, 9 Jan 2014 15:18:59 +0000 (17:18 +0200)]
test: renamed test scripts to format T\d\d\d-name.sh

All test scripts to be executed are now named as T\d\d\d-name.sh,
numers in increments of 10.

This eases adding new tests and developers to see which are test scripts
that are executed by test suite and in which order.

10 years agotest: basic: drop 'ensure all available tests are run'
Tomi Ollila [Thu, 9 Jan 2014 15:18:58 +0000 (17:18 +0200)]
test: basic: drop 'ensure all available tests are run'

When naming test scripts in format 'T\d\d\d-name.sh' the list of
tests to run are created dynamically. This makes test

'Ensure that all available tests will be run by notmuch-test'

in test/basic obsolete.

10 years agoemacs: tree remove comma separator tags
Mark Walters [Thu, 19 Dec 2013 19:12:23 +0000 (19:12 +0000)]
emacs: tree remove comma separator tags

Previously the tags on each line in tree view were separarted by ", "
not just " ". This is different from show and search views.

This patch removes this comma. This is a large patch as essentially
every line of each of the expected outputs in the tree tests needs
updating.

Apart from aesthetic reasons this simplifies the switch to
notmuch-tag-format-tags in the next patch.

10 years agobuild: remove trailing '/.' when doing mkdir -p .deps/.
Tomi Ollila [Sun, 3 Nov 2013 14:05:35 +0000 (16:05 +0200)]
build: remove trailing '/.' when doing mkdir -p .deps/.

When make variable $@ does not contain directory part, $(@D)
resolves as '.'. In this case .deps/$(@D) is '.deps/.'
In some systems `mkdir [-p] directory/.` fails.
To make this compatible with more system substitute trailing
'/.' (slashdot) with '' (empty string) whenever it occurs there.

10 years agoemacs: Makefile.local: HAVE_EMACS usage fixes
Tomi Ollila [Tue, 27 Aug 2013 19:00:47 +0000 (22:00 +0300)]
emacs: Makefile.local: HAVE_EMACS usage fixes

If we don't have emacs, disable targets that used EMACS while doing
the recipes of that target.

If we do have emacs, make install-emacs depend on *.elc files,
as making the target will attempt to install those.

10 years agoMerge tag 'debian/0.17-3'
David Bremner [Sun, 12 Jan 2014 23:56:25 +0000 (19:56 -0400)]
Merge tag 'debian/0.17-3'

uploaded to Debian unstable

10 years agodebian: add single-debian-patch
David Bremner [Sun, 12 Jan 2014 12:55:00 +0000 (08:55 -0400)]
debian: add single-debian-patch

The point of fancy patch systems is to share things with upstream. We
have met the upstream and he is us.

10 years agodebian: finalize changelog for 0.17-3
David Bremner [Sun, 12 Jan 2014 12:53:28 +0000 (08:53 -0400)]
debian: finalize changelog for 0.17-3

10 years agotest/emacs: replace the use of process-attributes with signal-process
David Bremner [Sat, 11 Jan 2014 17:25:39 +0000 (13:25 -0400)]
test/emacs: replace the use of process-attributes with signal-process

In some environments (at least Hurd), process-attributes is
unimplimented and always returns nil.  This ends up causing test
failures (see e.g. id:87a9ffofsc.fsf@zancas.localnet).

Historically and according to POSIX 1003.1-2001, a signal of 0 can be
used to check the validity of a pid. This seems less heinous than
parsing the output of ps(1).

10 years agodebian: update notmuch-emacs for emacs policy 2.0.6
David Bremner [Sun, 12 Jan 2014 03:05:33 +0000 (23:05 -0400)]
debian: update notmuch-emacs for emacs policy 2.0.6

This involves
- the meta-flavour emacs has gone away
- a compat file is needed (also installed by dh_installemacsen)
- a conflict with pre-2.0.0 emacsen-common
- manually managing the "installed" semaphore file

10 years agolib: modify notmuch.h for automatic document generation
Jani Nikula [Wed, 1 Jan 2014 17:52:54 +0000 (19:52 +0200)]
lib: modify notmuch.h for automatic document generation

Minimal changes to produce a sensible result.

10 years agodevel: add doxygen configuration file
Jani Nikula [Wed, 1 Jan 2014 17:52:53 +0000 (19:52 +0200)]
devel: add doxygen configuration file

This is a pretty basic config to get started, generated using 'doxygen
-s -g' and mildly tweaked.

To generate the library man page man/man3/notmuch.3 from lib/notmuch.h
use:

$ doxygen devel/doxygen.cfg

10 years agoinsert: respect maildir.synchronize_flags
Jani Nikula [Wed, 1 Jan 2014 15:20:14 +0000 (17:20 +0200)]
insert: respect maildir.synchronize_flags

Don't synchronize maildir flags if the user doesn't want it.

10 years agotest: notmuch insert with maildir.synchronize_flags=false
Jani Nikula [Wed, 1 Jan 2014 15:20:13 +0000 (17:20 +0200)]
test: notmuch insert with maildir.synchronize_flags=false

Known broken, notmuch insert does not respect the config option.

10 years agoemacs: tree: bare-id in tree
Mark Walters [Thu, 19 Dec 2013 19:16:51 +0000 (19:16 +0000)]
emacs: tree: bare-id in tree

Previously notmuch-tree-get-message-id always returned the id
including the prefix "id:". Modify the function to take an optional
`bare' argument saying to return the raw string.

This will be useful later and brings the function in line with
notmuch-show-get-message-id.

10 years agotest: tree: pick remnants removed
Mark Walters [Sat, 14 Dec 2013 22:58:32 +0000 (22:58 +0000)]
test: tree: pick remnants removed

Some no longer needed traces of pick remain in the emacs-tree
test. Remove these.

10 years agoMerge tag 'debian/0.17-2'
David Bremner [Wed, 1 Jan 2014 11:53:25 +0000 (07:53 -0400)]
Merge tag 'debian/0.17-2'

uploaded to unstable

10 years agodebian: rename NEWS.Debian to NEWS debian/0.17-2
David Bremner [Wed, 1 Jan 2014 11:23:25 +0000 (07:23 -0400)]
debian: rename NEWS.Debian to NEWS

Apparently I had it backwards: NEWS is installed as NEWS.Debian, not
vice-versa.

10 years agoMerge tag '0.17'
David Bremner [Tue, 31 Dec 2013 00:52:32 +0000 (20:52 -0400)]
Merge tag '0.17'

notmuch 0.17 release

10 years agodevel/release-checks.sh: adjust to LIBNOTMUCH version checks 0.17 debian/0.17-1
Tomi Ollila [Wed, 4 Dec 2013 19:31:58 +0000 (21:31 +0200)]
devel/release-checks.sh: adjust to LIBNOTMUCH version checks

NOTMUCH_VERSION_* macros in lib/notmuch.h are replaced with
LIBNOTMUCH_VERSION_* macros. Check that the values of those
match the LIBNOTMUCH_*_VERSION values in lib/Makefile.local.

10 years agoversion: bump to 0.17
David Bremner [Tue, 31 Dec 2013 00:34:23 +0000 (20:34 -0400)]
version: bump to 0.17

10 years agodebian: add changelog and NEWS.Debian for release
David Bremner [Tue, 31 Dec 2013 00:32:53 +0000 (20:32 -0400)]
debian: add changelog and NEWS.Debian for release

NEWS.Debian is displayed at install, so we include the news item about
the disruptive change in sha1 computation.

10 years agodebian: disable atomicity tests on ia64
David Bremner [Sun, 29 Dec 2013 15:24:23 +0000 (11:24 -0400)]
debian: disable atomicity tests on ia64

The following fails on Debian ia64:

% gdb /bin/mv
(gdb) break rename

Since this breaks our atomicity test, disable them until someone is
motivated to figure out whose fault that is.

10 years agoMerge tag '0.17_rc4'
David Bremner [Sun, 29 Dec 2013 01:45:19 +0000 (21:45 -0400)]
Merge tag '0.17_rc4'

notmuch 0.17~rc4 release

10 years agoversion: bump to 0.17~rc4
David Bremner [Sat, 28 Dec 2013 22:40:05 +0000 (18:40 -0400)]
version: bump to 0.17~rc4

Unfortunately release-checks.sh will whine a bit because it has not
caught up with the renaming of the version macros.

10 years agotest: Fix transient error in 'new' test
Austin Clements [Mon, 23 Dec 2013 20:20:36 +0000 (15:20 -0500)]
test: Fix transient error in 'new' test

This fixes a non-deterministic failure in "Ignore files and
directories specified in new.ignore (multiple occurrences)".  The test
assumed that all directories would be scanned, even though nothing
updated the mtime of ${MAIL_DIR}.  It *usually* worked nevertheless
because the tests run quickly enough that the directory mtime is
usually the same as the current time, so notmuch new does not update
the mtime in the database (because more changes could occur in the
same second).  However, when it occasionally did update the mtime in
the database, the notmuch new call in this test would (correctly) skip
"pass 2" of scanning ${MAIL_DIR}, causing it to skip the following
expected lines:

  (D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/.git
  (D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/.ignored_hidden_file
  (D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/ignored_file

This patch fixes this problem by touching ${MAIL_DIR} to ensure it
gets scanned and by rearranging the test to ensure the directories are
touched immediately before the main notmuch new call in the test.

11 years agotest: remove call to notmuch-hello from emacs_deliver_message
David Bremner [Sat, 14 Dec 2013 14:49:43 +0000 (22:49 +0800)]
test: remove call to notmuch-hello from emacs_deliver_message

There is an obscure bug in notmuch-hello that very occasionally causes
emacs_deliver_message to fail. Since it it doesn't serve any actual
purpose in the function we delete it, and leave tracking down the the
bug for another day.

11 years agotest: add emacs_fcc_message that does not use smtp-dummy
David Bremner [Sat, 14 Dec 2013 14:39:54 +0000 (22:39 +0800)]
test: add emacs_fcc_message that does not use smtp-dummy

Most of the tests previously using emacs_deliver_message do not use
the actual transmitted message, so we replace it with a simpler (and
presumably more reliable function) that only saves (and indexes) an
fcc copy of the message.

11 years agoperf-test: bump version to 0.4, use manifest files
David Bremner [Sun, 1 Dec 2013 03:00:03 +0000 (23:00 -0400)]
perf-test: bump version to 0.4, use manifest files

The new revision of the performance test includes manifests for each corpus,
so update the support library to use these manifests at the same time.

11 years agoemacs: add '?' to some prefix keymaps to describe its bindings
Mark Walters [Thu, 14 Nov 2013 09:49:46 +0000 (09:49 +0000)]
emacs: add '?' to some prefix keymaps to describe its bindings

Added function notmuch-subkeymap-help to describe keybindings of a
subkeymap (eg after . or c in notmuch-search and notmuch-show).

11 years agotest: implement and document NOTMUCH_TEST_QUIET variable usage
Tomi Ollila [Thu, 5 Dec 2013 12:46:00 +0000 (14:46 +0200)]
test: implement and document NOTMUCH_TEST_QUIET variable usage

When NOTMUCH_TEST_QUIET environment variable is set to non-null value
messages when new test script starts and when test PASSes are disabled.
This eases picking the cases when tests FAIL (as those are still printed).

11 years agotest: print empty line at the beginning of test script, not at end
Tomi Ollila [Mon, 25 Nov 2013 17:08:18 +0000 (19:08 +0200)]
test: print empty line at the beginning of test script, not at end

In preparation for quiet mode print empty line before writing the
test description. This is done now in function designed for it --
it will also be called when test fails.

11 years agotest: resolve `basename "$0" .sh` once for all in test-lib.sh
Tomi Ollila [Mon, 25 Nov 2013 17:08:17 +0000 (19:08 +0200)]
test: resolve `basename "$0" .sh` once for all in test-lib.sh

test-lib.sh sometimes did equivalent of `basename "$0" .sh`, sometimes
skipping the basename part and sometimes .sh part. This worked as
we never had path components in $0 (more than ./) nor .sh ending.

Now the equivalent of `basename "$0" .sh` is done once and used
everywhere. In the future we may have .sh suffix in test names
-- removing those is a good idea.

11 years agotest: give unique timestamps to messages
David Bremner [Sun, 8 Dec 2013 15:29:38 +0000 (23:29 +0800)]
test: give unique timestamps to messages

The choice of decreasing timestamps is a hack which reduces the number
of existing tests which fail.  This can be changed to increasing
if/when somebody wants update another 47 tests.

11 years agotest: sanitize dates in emacs, raw, and text output
David Bremner [Sun, 8 Dec 2013 14:52:41 +0000 (22:52 +0800)]
test: sanitize dates in emacs, raw, and text output

add a new function notmuch_date_sanitize for rfc822-ish things. Add
date sanitization to notmuch_show_sanitize_all and use it more places.

This is all in aid of a transition to unique timestamps on messages.

11 years agotest: sanitize Date and timestamp fields in json
David Bremner [Sun, 8 Dec 2013 08:41:34 +0000 (16:41 +0800)]
test: sanitize Date and timestamp fields in json

Eventually we want test messages to have distinct dates to avoid
reproducability problems. This sanitization will prevent some test
failures when that change is made.

Replace the use of a local function in maildir-sync with
notmuch_json_show_sanitize

11 years agotest: pass expected output through json_sanitize in 2 places
David Bremner [Sun, 8 Dec 2013 08:39:05 +0000 (16:39 +0800)]
test: pass expected output through json_sanitize in 2 places

This makes the tests more robust against changes in the
sanitization rules.

11 years agoversion: bump version
David Bremner [Sat, 7 Dec 2013 09:02:08 +0000 (17:02 +0800)]
version: bump version

Roll (one last?) release candidate because of Austin's
LIBNOTMUCH_VERSION changes.

Atomically bump the manually (NEWS, debian/changelog) and
automatically (everywhere else) updated places version is mentioned.

11 years agolib: Bump library version from 3.0.0 to 3.1.0
Austin Clements [Wed, 4 Dec 2013 16:19:46 +0000 (11:19 -0500)]
lib: Bump library version from 3.0.0 to 3.1.0

This version of the library introduces LIBNOTMUCH_CHECK_VERSION and
the *_VERSION macros.  Bumping the version number is also necessary to
make the comment on LIBNOTMUCH_CHECK_VERSION no longer a lie.