OUTPUT_COUNT = 1 << 7,
} output_t;
+typedef enum {
+ DEDUP_NONE,
+ DEDUP_MAILBOX,
+} dedup_t;
+
typedef enum {
NOTMUCH_FORMAT_JSON,
NOTMUCH_FORMAT_TEXT,
int limit;
int dupe;
GHashTable *addresses;
+ dedup_t dedup;
} search_context_t;
typedef struct {
.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)
.offset = 0,
.limit = -1, /* unlimited */
.dupe = -1,
+ .dedup = DEDUP_MAILBOX,
};
static const notmuch_opt_desc_t common_options[] = {
(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 *) ¬much_shared_options, NULL, 0, 0 },
{ 0, 0, 0, 0, 0 }
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;