aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2015-09-26cli: change the data structure for notmuch address deduplicationJani Nikula
Currently we key the address hash table with the case sensitive "name <address>". Switch to case insensitive keying with just address, and store the case sensitive name and address in linked lists. This will be helpful in adding support for different deduplication schemes in the future. There will be a slight performance penalty for the current full case sensitive name + address deduplication, but this is simpler as a whole when other deduplication schemes are added, and I expect the schemes to be added to become more popular than the current default. Aparet from the possible performance penalty, the only user visible change should be the change in the output ordering for --output=count. The order is not guaranteed (and is based on hash table traversal) currently anyway, so this should be of no consequence.
2015-09-26util: add strcmp_null, a strcmp that handles NULL parametersJani Nikula
Add strcmp_null, a strcmp that handles NULL strings; in strcmp terms a NULL string is considered to be less than a non-NULL string.
2015-09-25lib: add support for date:<expr>..! to mean date:<expr>..<expr>Jani Nikula
It doesn't seem likely we can support simple date:<expr> expanding to date:<expr>..<expr> any time soon. (This can be done with a future version of Xapian, or with a custom query query parser.) In the mean time, provide shorthand date:<expr>..! to mean the same. This is useful, as the expansion takes place before interpetation, and we can use, for example, date:yesterday..! to match from beginning of yesterday to end of yesterday. Idea from Mark Walters <markwalters1009@gmail.com>.
2015-09-25test suite: don't consider skipped individual tests as failingDavid Bremner
It isn't completely clear what we want to do here, but 1) We currently don't fail if we skip a whole test file (mainly because we neglect to count those skipped tests properly). This change at least makes the two kinds of skipping consistent. 2) Automated build environments may have good reasons for building with a minimal set of prereqs, and we don't want to discourage running our test suite by breaking builds.
2015-09-25make test: NOTMUCH_TEST_QUIET=1 is now the defaultTomi Ollila
make test V=1 (or any other value than 0) and make test V=0 works similar way as build in general
2015-09-24man: document notmuch address --deduplicate=(no|mailbox) optionJani Nikula
Document the deduplication of results.
2015-09-24test: notmuch address --deduplicate=no testsJani Nikula
Test not using address deduplication. Incorporate some trivial output sorting tests here, as they seem to lack tests.
2015-09-24cli: add support for not deduplicating notmuch address resultsJani Nikula
Make it possible to use notmuch address as part of a | sort | uniq -c pipe instead of forcing --output=count. This is useful for combining results from multiple notmuch address queries.
2015-09-24test: check argc in symbol-testJani Nikula
Check argc mainly to fix unused parameter warning: test/symbol-test.cc:7:14: warning: unused parameter ‘argc’ [-Wunused-parameter] int main(int argc, char** argv) { ^ This makes more sense than telling the compiler it's unused on purpose.
2015-09-23lib: constify arguments to notmuch_query_get_*David Bremner
These functions are all just accessors, and it's pretty clear they don't modify the query struct. This also fixes one warning I created when I introduced status.c.
2015-09-23cli: convert remainder of CLI to n_q_search_{messages,threads}_stDavid Bremner
I think it would be no real problem to cut and paste the gdb based error message test from count to the other clients modified here, but I'm not currently convinced it's worth the trouble since the code path being tested is almost the the same, and the tests are relatively heavyweight.
2015-09-20cli/count: update to use notmuch_query_search_messages_stDavid Bremner
This brings back status information that may have been hidden by the great library logging conversion. Note the change of the internal API / return-value for count_files. The other count calls to the lib will also get error handling when that API is updated in the lib.
2015-09-20cli: add utility routine to print error status.David Bremner
No attention to formatting here, initially just focus on getting the relevant strings out of the library.
2015-09-09cli/count: apply uncrustify changesDavid Bremner
Leave the indentation alone because I don't know how to duplicate it with Emacs.
2015-09-07cli/count: remove unused argument handling for output=modificationsDavid Bremner
In the end this UI was rejected, but bits of it stayed in the code to confuse future generations.
2015-09-07util: move strcase_equal and strcase_hash to utilJani Nikula
For future use in both cli and lib.
2015-09-07cli: abstract new mailbox creationJani Nikula
We'll be needing more mailbox creation soon, so abstract it away. While at it, check for allocation failures. No other functional changes.
2015-09-07cli: g_hash_table_lookup_extended is overkillJani Nikula
Switch to normal glib hash table lookup. The extended version is only required if the values may contain NULL.
2015-09-07test: fix whitespace/indentation in symbol-testJani Nikula
Not of much consequence, but makes it nicer to do further edits.
2015-09-07cli: reset db directory mtime upon directory removalJani Nikula
The library does not have a function to remove a directory document for a path. Usually this doesn't matter except for a slight waste of space. However, if the same directory gets added to the filesystem again, the old directory document is found with the old mtime. Reset the directory mtime on removal to avoid problems. The corner case that can hit this problem is renaming directories back and forth. Renaming does not change the mtime of the directory in the filesystem, and thus the old db directory document mtime may match the fs mtime of the directory. The long term fix might be to add a library function to remove a directory document, however this is a much simpler and faster fix for the time being.
2015-09-07emacs: wrap current search in parens when filteringUli Scholler
When filtering the current search further with notmuch-search-filter, wrap the current search in parens (if necessary). This fixes unexpected behavior when the current search is complex (like "(tag:this and date:one_week_ago..) or tag:that").
2015-09-04lib: constify argument to notmuch_database_status_stringDavid Bremner
We don't modify the database struct, so no harm in committing to that.
2015-09-04test: move backup_database and restore_database to libraryDavid Bremner
The plan is to re-use them in testing the same errors from the CLI
2015-09-04lib: note remaining uses of deprecated message search APIDavid Bremner
The two remaining cases in the lib seem to require more than a simple replacement of the old call, with the new call plus a check of the return value.
2015-09-04lib: remove use of notmuch_query_search_messages from query.ccDavid Bremner
There is not too much point in worrying about the bad error reporting here, because the count api is due for the same deprecation.
2015-08-26cli/lib: remove support for GMime 2.4David Bremner
It's becoming a maintenance burden to do anything things with the crypto glue code twice, once for 2.4 and once for 2.6. I don't have any 2.4 version available to test on my development machine anymore, so the 2.4 specific code paths are likely not very well tested.
2015-08-14lib: Add "lastmod:" queries for filtering by last modificationAustin Clements
The implementation is essentially the same as the date range search prior to Jani's fancy date parser.
2015-08-14cli: add global option "--uuid"David Bremner
The function notmuch_exit_if_unmatched_db_uuid is split from notmuch_process_shared_options because it needs an open notmuch database. There are two exceptional cases in uuid handling. 1) notmuch config and notmuch setup don't currently open the database, so it doesn't make sense to check the UUID. 2) notmuch compact opens the database inside the library, so we either need to open the database just to check uuid, or change the API.
2015-08-14cli/count: add --lastmodDavid Bremner
In the short term we need a way to get lastmod information e.g. for the test suite. In the long term we probably want to add lastmod information to at least the structured output for several other clients (e.g. show, search).
2015-08-13lib: API to retrieve database revision and UUIDAustin Clements
This exposes the committed database revision to library users along with a UUID that can be used to detect when revision numbers are no longer comparable (e.g., because the database has been replaced).
2015-08-13lib: Add per-message last modification trackingAustin Clements
This adds a new document value that stores the revision of the last modification to message metadata, where the revision number increases monotonically with each database commit. An alternative would be to store the wall-clock time of the last modification of each message. In principle this is simpler and has the advantage that any process can determine the current timestamp without support from libnotmuch. However, even assuming a computer's clock never goes backward and ignoring clock skew in networked environments, this has a fatal flaw. Xapian uses (optimistic) snapshot isolation, which means reads can be concurrent with writes. Given this, consider the following time line with a write and two read transactions: write |-X-A--------------| read 1 |---B---| read 2 |---| The write transaction modifies message X and records the wall-clock time of the modification at A. The writer hangs around for a while and later commits its change. Read 1 is concurrent with the write, so it doesn't see the change to X. It does some query and records the wall-clock time of its results at B. Transaction read 2 later starts after the write commits and queries for changes since wall-clock time B (say the reads are performing an incremental backup). Even though read 1 could not see the change to X, read 2 is told (correctly) that X has not changed since B, the time of the last read. In fact, X changed before wall-clock time A, but the change was not visible until *after* wall-clock time B, so read 2 misses the change to X. This is tricky to solve in full-blown snapshot isolation, but because Xapian serializes writes, we can use a simple, monotonically increasing database revision number. Furthermore, maintaining this revision number requires no more IO than a wall-clock time solution because Xapian already maintains statistics on the upper (and lower) bound of each value stream.
2015-08-10configure: clean up messages around reading libnotmuch versionJani Nikula
Clean up punctuation for consistency, and add newline for clean configure output.
2015-08-10build: extract library versions from notmuch.hDavid Bremner
- Make lib/notmuch.h the canonical location for the library versioning information. - Since the release-check should never fail now, remove it to reduce complexity. - Make the version numbers in notmuch.h consistent with the (now deleted) ones in lib/Makefile.local
2015-08-07test: make script exit (1) if it "fails" to source (.) a fileTomi Ollila
The files (test) scripts source (with builtin command `.`) provides information which the scripts depend, and without the `source` to succeed allowing script to continue may lead to dangerous situations (e.g. rm -rf "${undefined_variable}"/*). At the end of all source (.) lines construct ' || exit 1' was added; In our case the script script will exit if it cannot find (or read) the file to be sourced. Additionally script would also exits if the last command of the sourced file exited nonzero.
2015-08-07NEWS: emacs: notmuch-{cli,emacs}-version usageTomi Ollila
News for notmuch-emacs-version usage in User-Agent header and rename of function notmuch-version to notmuch-cli-version. While at it, made some minor (consistency) punctuation changes to make news to wiki conversion work as expected.
2015-08-07emacs/notmuch-mua.el: whitespace cleanupDavid Bremner
M-x whitespace-cleanup in Emacs.
2015-08-07emacs: make modifications to message Fcc vars buffer-localDavid Bremner
Previously we globally modified these variables, which tended to cause problems for people using message-mode, but not notmuch-mua-mail, to send mail. User visible changes: - Calling notmuch-fcc-header-setup is no longer optional. OTOH, it seems to do the right thing if notmuch-fcc-dirs is set to nil. - The Fcc header is visible during message composition - The name in the mode line is changed, and no longer matches exactly the menu label. - Previously notmuch-mua-send-and-exit was never called. Either we misunderstood define-mail-user-agent, or it had a bug. So there was no difference if the user called message-send-and-exit directly. Now there will be. - User bindings to C-c C-c and C-c C-s in message-mode-map are overridden. The user can override them in notmuch-message-mode-map, but then they're on their own for Fcc handling.
2015-08-07emacs: define a notmuch-compose-mode based on message mode.David Bremner
This is to provide a clean way of overriding e.g. keybindings when sending mail from notmuch. This is needed in particular to allow somewhere to dynamically bind certain message-mode variables which are not respected when buffer-local. See e.g. http://debbugs.gnu.org/cgi/bugreport.cgi?bug=21174
2015-08-04test: add debugging output to notmuch-new tests, mark 5 as brokenDavid Bremner
I marked the tests where I really couldn't understand the output as broken. It could also be that I don't understand how directory removal is supposed to work.
2015-08-04cli/new: add more debugging outputDavid Bremner
Try to narrow down what part of the code adds files and directories to the queue(s) to be deleted. Update one test. The output is slightly confusing, but I believe it is correct, resulting from a directory being discovered but containing only ignored files.
2015-08-04test: don't claim single message mbox support is going awayDavid Bremner
We gave up on this.
2015-08-04emacs: prefer notmuch-emacs-version in User-Agent: headerTomi Ollila
Now that we have `notmuch-emacs-version' defined in notmuch emacs MUA use that as a part of User-Agent: header to provide more accurate version information when sending emails. In case some incomplete installation of notmuch emacs MUA is used and `notmuch-emacs-version' is defined as "unknown" then fall back to ask version info from cli (as it used to be before this commit). Requiring notmuch-version[.elc] and if that is missing setting "fallback" notmuch-emacs-version (to "unknown") was moved from notmuch.el to notmuch-lib.el as notmuch-mua.el (which provides User-Agent: information) require's the latter.
2015-08-04emacs: renamed function notmuch-version to notmuch-cli-versionTomi Ollila
As it asks `notmuch` binary for its version number.
2015-08-04devel/release-checks.sh: made python version check work with python 3Tomi Ollila
This trivial change consists of just putting print() argument in parentheses.
2015-08-04test: use the python interpreter in sh.configDavid Bremner
The configure script chooses "python" if both python and python{2,3} exist exists, so this could change the version of python used to run the test suite. The checking for ${NOTMUCH_PYTHON} in the test suite is arguably over-engineering, since the configure step will fail if it can't find it.
2015-08-04emacs: add a filter option to showMark Walters
Show the current thread with a different filter (i.e., open messages in the thread matching the new query). Bound to 'l' for "limit". Note that it is not the same as filter in search mode as it replaces the existing query rather than ANDing with it (but it does keep the thread-id part of the query).
2015-08-04emacs: split notmuch-show-apply-stateMark Walters
Separate out a notmuch-show-goto-msg-id sub-function from notmuch-show-apply-state. There should be no functional change but the next patch will call the new function.
2015-08-04lib: add public accessor for database from queryDavid Bremner
This is to make it easier for clients of the library to update to the new error code returning versions of notmuch_query_search_messages
2015-08-04lib: deprecate notmuch_query_search_{threads, messages}David Bremner
The CLI (and bindings) code should really be updated to use the new status-code-returning versions. Here are some warnings to prod us (and other clients) to do so.
2015-08-04lib: define NOTMUCH_DEPRECATED macro, document its use.David Bremner
This has been tested with gcc and clang.