cli: do not sort addresses on --output=count or --deduplicate=address

The order of the results with --output=count and --deduplicate=address
are unspecified as they're based on a hash table traversal. This being
the case, optimize the query by explicitly requesting unsorted
results. Clarify the documentation accordingly.
This commit is contained in:
Jani Nikula 2015-09-03 22:40:05 +03:00 committed by David Bremner
parent 71fae18fba
commit 02e394aed2
2 changed files with 8 additions and 1 deletions

View file

@ -85,7 +85,9 @@ Supported options for **address** include
By default, results will be displayed in reverse chronological By default, results will be displayed in reverse chronological
order, (that is, the newest results will be displayed first). order, (that is, the newest results will be displayed first).
This option is not supported with --output=count. However, if either --output=count or --deduplicate=address is
specified, this option is ignored and the order of the results
is unspecified.
``--exclude=(true|false)`` ``--exclude=(true|false)``
A message is called "excluded" if it matches at least one tag in A message is called "excluded" if it matches at least one tag in

View file

@ -883,6 +883,11 @@ notmuch_address_command (notmuch_config_t *config, int argc, char *argv[])
_talloc_free_for_g_hash, _talloc_free_for_g_hash,
_list_free_for_g_hash); _list_free_for_g_hash);
/* The order is not guaranteed if a full pass is required, so go
* for fastest. */
if (ctx->output & OUTPUT_COUNT || ctx->dedup == DEDUP_ADDRESS)
notmuch_query_set_sort (ctx->query, NOTMUCH_SORT_UNSORTED);
ret = do_search_messages (ctx); ret = do_search_messages (ctx);
g_hash_table_unref (ctx->addresses); g_hash_table_unref (ctx->addresses);