aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJani Nikula <jani@nikula.org>2015-09-03 22:39:59 +0300
committerDavid Bremner <david@tethera.net>2015-09-24 07:32:24 -0300
commite5a03354294fb9d2ddcc8c03459fc2e347bd0ec1 (patch)
treeb87c4da3ef808c5fb8f5b093cf299c180bc878a0
parent19ea288679373f1c371234f982b8b9635b0e06c5 (diff)
cli: add support for not deduplicating notmuch address results
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.
-rw-r--r--notmuch-search.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/notmuch-search.c b/notmuch-search.c
index 3c455bfe..966c310f 100644
--- a/notmuch-search.c
+++ b/notmuch-search.c
@@ -37,6 +37,11 @@ typedef enum {
} output_t;
typedef enum {
+ DEDUP_NONE,
+ DEDUP_MAILBOX,
+} dedup_t;
+
+typedef enum {
NOTMUCH_FORMAT_JSON,
NOTMUCH_FORMAT_TEXT,
NOTMUCH_FORMAT_TEXT0,
@@ -55,6 +60,7 @@ typedef struct {
int limit;
int dupe;
GHashTable *addresses;
+ dedup_t dedup;
} search_context_t;
typedef struct {
@@ -356,7 +362,9 @@ process_address_list (const search_context_t *ctx,
.count = 0,
};
- if (is_duplicate (ctx, mbx.name, mbx.addr))
+ /* OUTPUT_COUNT only works with deduplication */
+ if (ctx->dedup != DEDUP_NONE &&
+ is_duplicate (ctx, mbx.name, mbx.addr))
continue;
if (ctx->output & OUTPUT_COUNT)
@@ -659,6 +667,7 @@ static search_context_t search_context = {
.offset = 0,
.limit = -1, /* unlimited */
.dupe = -1,
+ .dedup = DEDUP_MAILBOX,
};
static const notmuch_opt_desc_t common_options[] = {
@@ -758,6 +767,10 @@ notmuch_address_command (notmuch_config_t *config, int argc, char *argv[])
(notmuch_keyword_t []){ { "true", NOTMUCH_EXCLUDE_TRUE },
{ "false", NOTMUCH_EXCLUDE_FALSE },
{ 0, 0 } } },
+ { NOTMUCH_OPT_KEYWORD, &ctx->dedup, "deduplicate", 'D',
+ (notmuch_keyword_t []){ { "no", DEDUP_NONE },
+ { "mailbox", DEDUP_MAILBOX },
+ { 0, 0 } } },
{ NOTMUCH_OPT_INHERIT, (void *) &common_options, NULL, 0, 0 },
{ NOTMUCH_OPT_INHERIT, (void *) &notmuch_shared_options, NULL, 0, 0 },
{ 0, 0, 0, 0, 0 }
@@ -772,6 +785,11 @@ notmuch_address_command (notmuch_config_t *config, int argc, char *argv[])
if (! (ctx->output & (OUTPUT_SENDER | OUTPUT_RECIPIENTS)))
ctx->output |= OUTPUT_SENDER;
+ if (ctx->output & OUTPUT_COUNT && ctx->dedup == DEDUP_NONE) {
+ fprintf (stderr, "--output=count is not applicable with --deduplicate=no\n");
+ return EXIT_FAILURE;
+ }
+
if (_notmuch_search_prepare (ctx, config,
argc - opt_index, argv + opt_index))
return EXIT_FAILURE;