In order to share some command line options between search and address
subcommands we need to add corresponding variables to the context
structure. While we are at it, we also add notmuch_database_t to unify
parameters of all do_search_* functions and to simplify subsequent
commits.
Otherwise, there are no functional changes.
#define OUTPUT_ADDRESS_FLAGS (OUTPUT_SENDER | OUTPUT_RECIPIENTS)
#define OUTPUT_ADDRESS_FLAGS (OUTPUT_SENDER | OUTPUT_RECIPIENTS)
+typedef enum {
+ NOTMUCH_FORMAT_JSON,
+ NOTMUCH_FORMAT_TEXT,
+ NOTMUCH_FORMAT_TEXT0,
+ NOTMUCH_FORMAT_SEXP
+} format_sel_t;
+
+ notmuch_database_t *notmuch;
+ format_sel_t format_sel;
+ notmuch_exclude_t exclude;
notmuch_query_t *query;
notmuch_sort_t sort;
output_t output;
notmuch_query_t *query;
notmuch_sort_t sort;
output_t output;
-do_search_tags (notmuch_database_t *notmuch,
- const search_context_t *ctx)
+do_search_tags (const search_context_t *ctx)
{
notmuch_messages_t *messages = NULL;
notmuch_tags_t *tags;
const char *tag;
sprinter_t *format = ctx->format;
notmuch_query_t *query = ctx->query;
{
notmuch_messages_t *messages = NULL;
notmuch_tags_t *tags;
const char *tag;
sprinter_t *format = ctx->format;
notmuch_query_t *query = ctx->query;
+ notmuch_database_t *notmuch = ctx->notmuch;
/* should the following only special case if no excluded terms
* specified? */
/* should the following only special case if no excluded terms
* specified? */
int
notmuch_search_command (notmuch_config_t *config, int argc, char *argv[])
{
int
notmuch_search_command (notmuch_config_t *config, int argc, char *argv[])
{
- notmuch_database_t *notmuch;
+ .format_sel = NOTMUCH_FORMAT_TEXT,
+ .exclude = NOTMUCH_EXCLUDE_TRUE,
.sort = NOTMUCH_SORT_NEWEST_FIRST,
.output = 0,
.offset = 0,
.sort = NOTMUCH_SORT_NEWEST_FIRST,
.output = 0,
.offset = 0,
};
char *query_str;
int opt_index, ret;
};
char *query_str;
int opt_index, ret;
- notmuch_exclude_t exclude = NOTMUCH_EXCLUDE_TRUE;
- enum {
- NOTMUCH_FORMAT_JSON,
- NOTMUCH_FORMAT_TEXT,
- NOTMUCH_FORMAT_TEXT0,
- NOTMUCH_FORMAT_SEXP
- } format_sel = NOTMUCH_FORMAT_TEXT;
-
notmuch_opt_desc_t options[] = {
{ NOTMUCH_OPT_KEYWORD, &ctx.sort, "sort", 's',
(notmuch_keyword_t []){ { "oldest-first", NOTMUCH_SORT_OLDEST_FIRST },
{ "newest-first", NOTMUCH_SORT_NEWEST_FIRST },
{ 0, 0 } } },
notmuch_opt_desc_t options[] = {
{ NOTMUCH_OPT_KEYWORD, &ctx.sort, "sort", 's',
(notmuch_keyword_t []){ { "oldest-first", NOTMUCH_SORT_OLDEST_FIRST },
{ "newest-first", NOTMUCH_SORT_NEWEST_FIRST },
{ 0, 0 } } },
- { NOTMUCH_OPT_KEYWORD, &format_sel, "format", 'f',
+ { NOTMUCH_OPT_KEYWORD, &ctx.format_sel, "format", 'f',
(notmuch_keyword_t []){ { "json", NOTMUCH_FORMAT_JSON },
{ "sexp", NOTMUCH_FORMAT_SEXP },
{ "text", NOTMUCH_FORMAT_TEXT },
(notmuch_keyword_t []){ { "json", NOTMUCH_FORMAT_JSON },
{ "sexp", NOTMUCH_FORMAT_SEXP },
{ "text", NOTMUCH_FORMAT_TEXT },
{ "files", OUTPUT_FILES },
{ "tags", OUTPUT_TAGS },
{ 0, 0 } } },
{ "files", OUTPUT_FILES },
{ "tags", OUTPUT_TAGS },
{ 0, 0 } } },
- { NOTMUCH_OPT_KEYWORD, &exclude, "exclude", 'x',
+ { NOTMUCH_OPT_KEYWORD, &ctx.exclude, "exclude", 'x',
(notmuch_keyword_t []){ { "true", NOTMUCH_EXCLUDE_TRUE },
{ "false", NOTMUCH_EXCLUDE_FALSE },
{ "flag", NOTMUCH_EXCLUDE_FLAG },
(notmuch_keyword_t []){ { "true", NOTMUCH_EXCLUDE_TRUE },
{ "false", NOTMUCH_EXCLUDE_FALSE },
{ "flag", NOTMUCH_EXCLUDE_FLAG },
+ switch (ctx.format_sel) {
case NOTMUCH_FORMAT_TEXT:
ctx.format = sprinter_text_create (config, stdout);
break;
case NOTMUCH_FORMAT_TEXT:
ctx.format = sprinter_text_create (config, stdout);
break;
notmuch_exit_if_unsupported_format ();
if (notmuch_database_open (notmuch_config_get_database_path (config),
notmuch_exit_if_unsupported_format ();
if (notmuch_database_open (notmuch_config_get_database_path (config),
- NOTMUCH_DATABASE_MODE_READ_ONLY, ¬much))
+ NOTMUCH_DATABASE_MODE_READ_ONLY, &ctx.notmuch))
- query_str = query_string_from_args (notmuch, argc-opt_index, argv+opt_index);
+ query_str = query_string_from_args (ctx.notmuch, argc-opt_index, argv+opt_index);
if (query_str == NULL) {
fprintf (stderr, "Out of memory.\n");
return EXIT_FAILURE;
if (query_str == NULL) {
fprintf (stderr, "Out of memory.\n");
return EXIT_FAILURE;
- ctx.query = notmuch_query_create (notmuch, query_str);
+ ctx.query = notmuch_query_create (ctx.notmuch, query_str);
if (ctx.query == NULL) {
fprintf (stderr, "Out of memory\n");
return EXIT_FAILURE;
if (ctx.query == NULL) {
fprintf (stderr, "Out of memory\n");
return EXIT_FAILURE;
notmuch_query_set_sort (ctx.query, ctx.sort);
notmuch_query_set_sort (ctx.query, ctx.sort);
- if (exclude == NOTMUCH_EXCLUDE_FLAG && ctx.output != OUTPUT_SUMMARY) {
+ if (ctx.exclude == NOTMUCH_EXCLUDE_FLAG && ctx.output != OUTPUT_SUMMARY) {
/* If we are not doing summary output there is nowhere to
* print the excluded flag so fall back on including the
* excluded messages. */
fprintf (stderr, "Warning: this output format cannot flag excluded messages.\n");
/* If we are not doing summary output there is nowhere to
* print the excluded flag so fall back on including the
* excluded messages. */
fprintf (stderr, "Warning: this output format cannot flag excluded messages.\n");
- exclude = NOTMUCH_EXCLUDE_FALSE;
+ ctx.exclude = NOTMUCH_EXCLUDE_FALSE;
- if (exclude != NOTMUCH_EXCLUDE_FALSE) {
+ if (ctx.exclude != NOTMUCH_EXCLUDE_FALSE) {
const char **search_exclude_tags;
size_t search_exclude_tags_length;
const char **search_exclude_tags;
size_t search_exclude_tags_length;
(config, &search_exclude_tags_length);
for (i = 0; i < search_exclude_tags_length; i++)
notmuch_query_add_tag_exclude (ctx.query, search_exclude_tags[i]);
(config, &search_exclude_tags_length);
for (i = 0; i < search_exclude_tags_length; i++)
notmuch_query_add_tag_exclude (ctx.query, search_exclude_tags[i]);
- notmuch_query_set_omit_excluded (ctx.query, exclude);
+ notmuch_query_set_omit_excluded (ctx.query, ctx.exclude);
}
if (ctx.output == OUTPUT_SUMMARY ||
}
if (ctx.output == OUTPUT_SUMMARY ||
(ctx.output & OUTPUT_ADDRESS_FLAGS && !(ctx.output & ~OUTPUT_ADDRESS_FLAGS)))
ret = do_search_messages (&ctx);
else if (ctx.output == OUTPUT_TAGS)
(ctx.output & OUTPUT_ADDRESS_FLAGS && !(ctx.output & ~OUTPUT_ADDRESS_FLAGS)))
ret = do_search_messages (&ctx);
else if (ctx.output == OUTPUT_TAGS)
- ret = do_search_tags (notmuch, &ctx);
+ ret = do_search_tags (&ctx);
else {
fprintf (stderr, "Error: the combination of outputs is not supported.\n");
ret = 1;
}
notmuch_query_destroy (ctx.query);
else {
fprintf (stderr, "Error: the combination of outputs is not supported.\n");
ret = 1;
}
notmuch_query_destroy (ctx.query);
- notmuch_database_destroy (notmuch);
+ notmuch_database_destroy (ctx.notmuch);
talloc_free (ctx.format);
talloc_free (ctx.format);