mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-28 05:34:11 +01:00
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.
This commit is contained in:
parent
19ea288679
commit
e5a0335429
1 changed files with 19 additions and 1 deletions
|
@ -36,6 +36,11 @@ typedef enum {
|
||||||
OUTPUT_COUNT = 1 << 7,
|
OUTPUT_COUNT = 1 << 7,
|
||||||
} output_t;
|
} output_t;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
DEDUP_NONE,
|
||||||
|
DEDUP_MAILBOX,
|
||||||
|
} dedup_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
NOTMUCH_FORMAT_JSON,
|
NOTMUCH_FORMAT_JSON,
|
||||||
NOTMUCH_FORMAT_TEXT,
|
NOTMUCH_FORMAT_TEXT,
|
||||||
|
@ -55,6 +60,7 @@ typedef struct {
|
||||||
int limit;
|
int limit;
|
||||||
int dupe;
|
int dupe;
|
||||||
GHashTable *addresses;
|
GHashTable *addresses;
|
||||||
|
dedup_t dedup;
|
||||||
} search_context_t;
|
} search_context_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -356,7 +362,9 @@ process_address_list (const search_context_t *ctx,
|
||||||
.count = 0,
|
.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;
|
continue;
|
||||||
|
|
||||||
if (ctx->output & OUTPUT_COUNT)
|
if (ctx->output & OUTPUT_COUNT)
|
||||||
|
@ -659,6 +667,7 @@ static search_context_t search_context = {
|
||||||
.offset = 0,
|
.offset = 0,
|
||||||
.limit = -1, /* unlimited */
|
.limit = -1, /* unlimited */
|
||||||
.dupe = -1,
|
.dupe = -1,
|
||||||
|
.dedup = DEDUP_MAILBOX,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const notmuch_opt_desc_t common_options[] = {
|
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 },
|
(notmuch_keyword_t []){ { "true", NOTMUCH_EXCLUDE_TRUE },
|
||||||
{ "false", NOTMUCH_EXCLUDE_FALSE },
|
{ "false", NOTMUCH_EXCLUDE_FALSE },
|
||||||
{ 0, 0 } } },
|
{ 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 *) &common_options, NULL, 0, 0 },
|
||||||
{ NOTMUCH_OPT_INHERIT, (void *) ¬much_shared_options, NULL, 0, 0 },
|
{ NOTMUCH_OPT_INHERIT, (void *) ¬much_shared_options, NULL, 0, 0 },
|
||||||
{ 0, 0, 0, 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)))
|
if (! (ctx->output & (OUTPUT_SENDER | OUTPUT_RECIPIENTS)))
|
||||||
ctx->output |= OUTPUT_SENDER;
|
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,
|
if (_notmuch_search_prepare (ctx, config,
|
||||||
argc - opt_index, argv + opt_index))
|
argc - opt_index, argv + opt_index))
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
|
Loading…
Reference in a new issue