unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: Jani Nikula <jani@nikula.org>
To: notmuch@notmuchmail.org
Subject: [PATCH v2 3/9] cli: add support for not deduplicating notmuch address results
Date: Thu,  3 Sep 2015 22:39:59 +0300	[thread overview]
Message-ID: <fd59eadee26a770097517bee038e2b126e11aa90.1441308761.git.jani@nikula.org> (raw)
In-Reply-To: <cover.1441308761.git.jani@nikula.org>
In-Reply-To: <cover.1441308761.git.jani@nikula.org>

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.
---
 notmuch-search.c | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/notmuch-search.c b/notmuch-search.c
index 36f58eb8d54c..66404b561679 100644
--- a/notmuch-search.c
+++ b/notmuch-search.c
@@ -37,12 +37,18 @@ typedef enum {
 } output_t;
 
 typedef enum {
+    DEDUP_NONE,
+    DEDUP_MAILBOX,
+} dedup_t;
+
+typedef enum {
     NOTMUCH_FORMAT_JSON,
     NOTMUCH_FORMAT_TEXT,
     NOTMUCH_FORMAT_TEXT0,
     NOTMUCH_FORMAT_SEXP
 } format_sel_t;
 
+
 typedef struct {
     notmuch_database_t *notmuch;
     format_sel_t format_sel;
@@ -55,6 +61,7 @@ typedef struct {
     int limit;
     int dupe;
     GHashTable *addresses;
+    dedup_t dedup;
 } search_context_t;
 
 typedef struct {
@@ -355,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)
@@ -656,6 +665,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[] = {
@@ -755,6 +765,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 }
@@ -769,6 +783,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;
-- 
2.1.4

  parent reply	other threads:[~2015-09-03 19:40 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-03 19:39 [PATCH v2 0/9] cli: alternative address deduplication Jani Nikula
2015-09-03 19:39 ` [PATCH v2 1/9] cli: g_hash_table_lookup_extended is overkill Jani Nikula
2015-09-03 19:39 ` [PATCH v2 2/9] cli: abstract new mailbox creation Jani Nikula
2015-09-03 19:39 ` Jani Nikula [this message]
2015-09-04 18:35   ` [PATCH 3½/9] test: notmuch address --deduplicate=no tests Jani Nikula
2015-09-20 12:43     ` David Bremner
2015-09-23 18:56       ` Jani Nikula
2015-09-03 19:40 ` [PATCH v2 4/9] man: document notmuch address --deduplicate=(no|mailbox) option Jani Nikula
2015-09-20 12:45   ` David Bremner
2015-09-23 19:31     ` [PATCH] " Jani Nikula
2015-09-24 10:37       ` David Bremner
2015-09-03 19:40 ` [PATCH v2 5/9] util: move strcase_equal and strcase_hash to util Jani Nikula
2015-09-03 19:40 ` [PATCH v2 6/9] cli: change the data structure for notmuch address deduplication Jani Nikula
2015-09-24 12:32   ` David Bremner
2015-09-24 12:40     ` David Bremner
2015-09-24 19:55       ` Tomi Ollila
2015-09-24 18:34     ` Jani Nikula
2015-09-24 23:31       ` David Bremner
2015-09-25 16:48         ` [PATCH 6/9 v3 part 1/2] util: add strcmp_null, a strcmp that handles NULL parameters Jani Nikula
2015-09-25 16:48           ` [PATCH 6/9 v3 part 2/2] cli: change the data structure for notmuch address deduplication Jani Nikula
2015-09-03 19:40 ` [PATCH v2 7/9] cli: add support for deduplicating based on case insensitive address Jani Nikula
2015-09-04 18:38   ` [PATCH 7½/9] test: add notmuch address --deduplicate=(no|mailbox|address) tests Jani Nikula
2015-09-25  0:02     ` David Bremner
2015-09-25 17:08       ` [PATCH v2 " Jani Nikula
2015-09-03 19:40 ` [PATCH v2 8/9] man: document notmuch address --deduplicate=address option Jani Nikula
2015-09-03 19:40 ` [PATCH v2 9/9] cli: do not sort addresses on --output=count or --deduplicate=address Jani Nikula
2015-09-07 12:52 ` [PATCH v2 0/9] cli: alternative address deduplication David Bremner
2015-09-26 10:48   ` David Bremner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=fd59eadee26a770097517bee038e2b126e11aa90.1441308761.git.jani@nikula.org \
    --to=jani@nikula.org \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).