[PATCH 3/5] cli: add --batch option to notmuch count

2013-01-15 Thread Jani Nikula
Add support for reading queries from stdin, one per line, and writing
results to stdin, one per line.

This will bring considerable performance improvements when utilized in
Emacs notmuch-hello, especially so when running remote notmuch.
---
 notmuch-count.c |   52 ++--
 1 file changed, 50 insertions(+), 2 deletions(-)

diff --git a/notmuch-count.c b/notmuch-count.c
index 0e14b48..4bc4215 100644
--- a/notmuch-count.c
+++ b/notmuch-count.c
@@ -62,6 +62,27 @@ print_count (notmuch_database_t *notmuch, const char 
*query_str,
 return 0;
 }
 
+static int
+count_file (notmuch_database_t *notmuch, FILE *input, const char 
**exclude_tags,
+   size_t exclude_tags_length, int output)
+{
+char *line = NULL;
+ssize_t line_len;
+size_t line_size;
+int ret = 0;
+
+while (!ret && (line_len = getline (&line, &line_size, input)) != -1) {
+   chomp_newline (line);
+   ret = print_count (notmuch, line, exclude_tags, exclude_tags_length,
+  output);
+}
+
+if (line)
+   free (line);
+
+return ret;
+}
+
 int
 notmuch_count_command (void *ctx, int argc, char *argv[])
 {
@@ -73,6 +94,9 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
 int exclude = EXCLUDE_TRUE;
 const char **search_exclude_tags = NULL;
 size_t search_exclude_tags_length = 0;
+notmuch_bool_t batch = FALSE;
+FILE *input = stdin;
+char *input_file_name = NULL;
 int ret;
 
 notmuch_opt_desc_t options[] = {
@@ -84,6 +108,8 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
  (notmuch_keyword_t []){ { "true", EXCLUDE_TRUE },
  { "false", EXCLUDE_FALSE },
  { 0, 0 } } },
+   { NOTMUCH_OPT_BOOLEAN, &batch, "batch", 0, 0 },
+   { NOTMUCH_OPT_STRING, &input_file_name, "input", 'i', 0 },
{ 0, 0, 0, 0, 0 }
 };
 
@@ -93,6 +119,21 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
return 1;
 }
 
+if (input_file_name) {
+   batch = TRUE;
+   input = fopen (input_file_name, "r");
+   if (input == NULL) {
+   fprintf (stderr, "Error opening %s for reading: %s\n",
+input_file_name, strerror (errno));
+   return 1;
+   }
+}
+
+if (batch && opt_index != argc) {
+   fprintf (stderr, "--batch and query string are not compatible\n");
+   return 1;
+}
+
 config = notmuch_config_open (ctx, NULL, NULL);
 if (config == NULL)
return 1;
@@ -112,10 +153,17 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
(config, &search_exclude_tags_length);
 }
 
-ret = print_count (notmuch, query_str, search_exclude_tags,
-  search_exclude_tags_length, output);
+if (batch)
+   ret = count_file (notmuch, input, search_exclude_tags,
+ search_exclude_tags_length, output);
+else
+   ret = print_count (notmuch, query_str, search_exclude_tags,
+  search_exclude_tags_length, output);
 
 notmuch_database_destroy (notmuch);
 
+if (input != stdin)
+   fclose (input);
+
 return ret;
 }
-- 
1.7.10.4

___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


[PATCH 3/5] cli: add --batch option to notmuch count

2013-01-15 Thread Jani Nikula
Add support for reading queries from stdin, one per line, and writing
results to stdin, one per line.

This will bring considerable performance improvements when utilized in
Emacs notmuch-hello, especially so when running remote notmuch.
---
 notmuch-count.c |   52 ++--
 1 file changed, 50 insertions(+), 2 deletions(-)

diff --git a/notmuch-count.c b/notmuch-count.c
index 0e14b48..4bc4215 100644
--- a/notmuch-count.c
+++ b/notmuch-count.c
@@ -62,6 +62,27 @@ print_count (notmuch_database_t *notmuch, const char 
*query_str,
 return 0;
 }

+static int
+count_file (notmuch_database_t *notmuch, FILE *input, const char 
**exclude_tags,
+   size_t exclude_tags_length, int output)
+{
+char *line = NULL;
+ssize_t line_len;
+size_t line_size;
+int ret = 0;
+
+while (!ret && (line_len = getline (&line, &line_size, input)) != -1) {
+   chomp_newline (line);
+   ret = print_count (notmuch, line, exclude_tags, exclude_tags_length,
+  output);
+}
+
+if (line)
+   free (line);
+
+return ret;
+}
+
 int
 notmuch_count_command (void *ctx, int argc, char *argv[])
 {
@@ -73,6 +94,9 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
 int exclude = EXCLUDE_TRUE;
 const char **search_exclude_tags = NULL;
 size_t search_exclude_tags_length = 0;
+notmuch_bool_t batch = FALSE;
+FILE *input = stdin;
+char *input_file_name = NULL;
 int ret;

 notmuch_opt_desc_t options[] = {
@@ -84,6 +108,8 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
  (notmuch_keyword_t []){ { "true", EXCLUDE_TRUE },
  { "false", EXCLUDE_FALSE },
  { 0, 0 } } },
+   { NOTMUCH_OPT_BOOLEAN, &batch, "batch", 0, 0 },
+   { NOTMUCH_OPT_STRING, &input_file_name, "input", 'i', 0 },
{ 0, 0, 0, 0, 0 }
 };

@@ -93,6 +119,21 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
return 1;
 }

+if (input_file_name) {
+   batch = TRUE;
+   input = fopen (input_file_name, "r");
+   if (input == NULL) {
+   fprintf (stderr, "Error opening %s for reading: %s\n",
+input_file_name, strerror (errno));
+   return 1;
+   }
+}
+
+if (batch && opt_index != argc) {
+   fprintf (stderr, "--batch and query string are not compatible\n");
+   return 1;
+}
+
 config = notmuch_config_open (ctx, NULL, NULL);
 if (config == NULL)
return 1;
@@ -112,10 +153,17 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
(config, &search_exclude_tags_length);
 }

-ret = print_count (notmuch, query_str, search_exclude_tags,
-  search_exclude_tags_length, output);
+if (batch)
+   ret = count_file (notmuch, input, search_exclude_tags,
+ search_exclude_tags_length, output);
+else
+   ret = print_count (notmuch, query_str, search_exclude_tags,
+  search_exclude_tags_length, output);

 notmuch_database_destroy (notmuch);

+if (input != stdin)
+   fclose (input);
+
 return ret;
 }
-- 
1.7.10.4



[PATCH 3/5] cli: add --batch option to notmuch count

2013-01-23 Thread Tomi Ollila
On Tue, Jan 15 2013, Jani Nikula  wrote:

> Add support for reading queries from stdin, one per line, and writing
> results to stdin, one per line.

Jani's parts LGTM, except one IMPORTANT part -- results are written
to STDOUT! (hopefully...yes) instead of STDIN! ;)

I don't see a reason why this particular way to get counts could
not be supported in notmuch into foreseeable future; the implementation
is simple and clean.

Next to look Mark's changes...

Tomi

>
> This will bring considerable performance improvements when utilized in
> Emacs notmuch-hello, especially so when running remote notmuch.
> ---
>  notmuch-count.c |   52 ++--
>  1 file changed, 50 insertions(+), 2 deletions(-)
>
> diff --git a/notmuch-count.c b/notmuch-count.c
> index 0e14b48..4bc4215 100644
> --- a/notmuch-count.c
> +++ b/notmuch-count.c
> @@ -62,6 +62,27 @@ print_count (notmuch_database_t *notmuch, const char 
> *query_str,
>  return 0;
>  }
>  
> +static int
> +count_file (notmuch_database_t *notmuch, FILE *input, const char 
> **exclude_tags,
> + size_t exclude_tags_length, int output)
> +{
> +char *line = NULL;
> +ssize_t line_len;
> +size_t line_size;
> +int ret = 0;
> +
> +while (!ret && (line_len = getline (&line, &line_size, input)) != -1) {
> + chomp_newline (line);
> + ret = print_count (notmuch, line, exclude_tags, exclude_tags_length,
> +output);
> +}
> +
> +if (line)
> + free (line);
> +
> +return ret;
> +}
> +
>  int
>  notmuch_count_command (void *ctx, int argc, char *argv[])
>  {
> @@ -73,6 +94,9 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
>  int exclude = EXCLUDE_TRUE;
>  const char **search_exclude_tags = NULL;
>  size_t search_exclude_tags_length = 0;
> +notmuch_bool_t batch = FALSE;
> +FILE *input = stdin;
> +char *input_file_name = NULL;
>  int ret;
>  
>  notmuch_opt_desc_t options[] = {
> @@ -84,6 +108,8 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
> (notmuch_keyword_t []){ { "true", EXCLUDE_TRUE },
> { "false", EXCLUDE_FALSE },
> { 0, 0 } } },
> + { NOTMUCH_OPT_BOOLEAN, &batch, "batch", 0, 0 },
> + { NOTMUCH_OPT_STRING, &input_file_name, "input", 'i', 0 },
>   { 0, 0, 0, 0, 0 }
>  };
>  
> @@ -93,6 +119,21 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
>   return 1;
>  }
>  
> +if (input_file_name) {
> + batch = TRUE;
> + input = fopen (input_file_name, "r");
> + if (input == NULL) {
> + fprintf (stderr, "Error opening %s for reading: %s\n",
> +  input_file_name, strerror (errno));
> + return 1;
> + }
> +}
> +
> +if (batch && opt_index != argc) {
> + fprintf (stderr, "--batch and query string are not compatible\n");
> + return 1;
> +}
> +
>  config = notmuch_config_open (ctx, NULL, NULL);
>  if (config == NULL)
>   return 1;
> @@ -112,10 +153,17 @@ notmuch_count_command (void *ctx, int argc, char 
> *argv[])
>   (config, &search_exclude_tags_length);
>  }
>  
> -ret = print_count (notmuch, query_str, search_exclude_tags,
> -search_exclude_tags_length, output);
> +if (batch)
> + ret = count_file (notmuch, input, search_exclude_tags,
> +   search_exclude_tags_length, output);
> +else
> + ret = print_count (notmuch, query_str, search_exclude_tags,
> +search_exclude_tags_length, output);
>  
>  notmuch_database_destroy (notmuch);
>  
> +if (input != stdin)
> + fclose (input);
> +
>  return ret;
>  }
> -- 
> 1.7.10.4
>
> ___
> notmuch mailing list
> notmuch at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch


Re: [PATCH 3/5] cli: add --batch option to notmuch count

2013-01-23 Thread Tomi Ollila
On Tue, Jan 15 2013, Jani Nikula  wrote:

> Add support for reading queries from stdin, one per line, and writing
> results to stdin, one per line.

Jani's parts LGTM, except one IMPORTANT part -- results are written
to STDOUT! (hopefully...yes) instead of STDIN! ;)

I don't see a reason why this particular way to get counts could
not be supported in notmuch into foreseeable future; the implementation
is simple and clean.

Next to look Mark's changes...

Tomi

>
> This will bring considerable performance improvements when utilized in
> Emacs notmuch-hello, especially so when running remote notmuch.
> ---
>  notmuch-count.c |   52 ++--
>  1 file changed, 50 insertions(+), 2 deletions(-)
>
> diff --git a/notmuch-count.c b/notmuch-count.c
> index 0e14b48..4bc4215 100644
> --- a/notmuch-count.c
> +++ b/notmuch-count.c
> @@ -62,6 +62,27 @@ print_count (notmuch_database_t *notmuch, const char 
> *query_str,
>  return 0;
>  }
>  
> +static int
> +count_file (notmuch_database_t *notmuch, FILE *input, const char 
> **exclude_tags,
> + size_t exclude_tags_length, int output)
> +{
> +char *line = NULL;
> +ssize_t line_len;
> +size_t line_size;
> +int ret = 0;
> +
> +while (!ret && (line_len = getline (&line, &line_size, input)) != -1) {
> + chomp_newline (line);
> + ret = print_count (notmuch, line, exclude_tags, exclude_tags_length,
> +output);
> +}
> +
> +if (line)
> + free (line);
> +
> +return ret;
> +}
> +
>  int
>  notmuch_count_command (void *ctx, int argc, char *argv[])
>  {
> @@ -73,6 +94,9 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
>  int exclude = EXCLUDE_TRUE;
>  const char **search_exclude_tags = NULL;
>  size_t search_exclude_tags_length = 0;
> +notmuch_bool_t batch = FALSE;
> +FILE *input = stdin;
> +char *input_file_name = NULL;
>  int ret;
>  
>  notmuch_opt_desc_t options[] = {
> @@ -84,6 +108,8 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
> (notmuch_keyword_t []){ { "true", EXCLUDE_TRUE },
> { "false", EXCLUDE_FALSE },
> { 0, 0 } } },
> + { NOTMUCH_OPT_BOOLEAN, &batch, "batch", 0, 0 },
> + { NOTMUCH_OPT_STRING, &input_file_name, "input", 'i', 0 },
>   { 0, 0, 0, 0, 0 }
>  };
>  
> @@ -93,6 +119,21 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
>   return 1;
>  }
>  
> +if (input_file_name) {
> + batch = TRUE;
> + input = fopen (input_file_name, "r");
> + if (input == NULL) {
> + fprintf (stderr, "Error opening %s for reading: %s\n",
> +  input_file_name, strerror (errno));
> + return 1;
> + }
> +}
> +
> +if (batch && opt_index != argc) {
> + fprintf (stderr, "--batch and query string are not compatible\n");
> + return 1;
> +}
> +
>  config = notmuch_config_open (ctx, NULL, NULL);
>  if (config == NULL)
>   return 1;
> @@ -112,10 +153,17 @@ notmuch_count_command (void *ctx, int argc, char 
> *argv[])
>   (config, &search_exclude_tags_length);
>  }
>  
> -ret = print_count (notmuch, query_str, search_exclude_tags,
> -search_exclude_tags_length, output);
> +if (batch)
> + ret = count_file (notmuch, input, search_exclude_tags,
> +   search_exclude_tags_length, output);
> +else
> + ret = print_count (notmuch, query_str, search_exclude_tags,
> +search_exclude_tags_length, output);
>  
>  notmuch_database_destroy (notmuch);
>  
> +if (input != stdin)
> + fclose (input);
> +
>  return ret;
>  }
> -- 
> 1.7.10.4
>
> ___
> notmuch mailing list
> notmuch@notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch