From 02e394aed216622ac355ff15bae74403abf40417 Mon Sep 17 00:00:00 2001 From: Jani Nikula Date: Thu, 3 Sep 2015 22:40:05 +0300 Subject: [PATCH] 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. --- doc/man1/notmuch-address.rst | 4 +++- notmuch-search.c | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/doc/man1/notmuch-address.rst b/doc/man1/notmuch-address.rst index 935851ef..7f7214b3 100644 --- a/doc/man1/notmuch-address.rst +++ b/doc/man1/notmuch-address.rst @@ -85,7 +85,9 @@ Supported options for **address** include By default, results will be displayed in reverse chronological 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)`` A message is called "excluded" if it matches at least one tag in diff --git a/notmuch-search.c b/notmuch-search.c index 2eaad32f..44e582cb 100644 --- a/notmuch-search.c +++ b/notmuch-search.c @@ -883,6 +883,11 @@ notmuch_address_command (notmuch_config_t *config, int argc, char *argv[]) _talloc_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); g_hash_table_unref (ctx->addresses);