cli: move search to the new --exclude= naming scheme.

This commit replaces the --no-exclude option with a
--exclude=(true|false|flag) option. The default is to omit the
excluded messages.

The flag option only makes sense if output=summary (as otherwise there
is nowhere to print the flag). In summary output exclude=false and
exclude=flag give almost identical output:
they differ in that with the exclude=flag option the match count
(i.e., the x in [x/n] in the output) is the number of matching
non-excluded messages rather than the number of matching messages.

Note this changes the default for output=summary when no --exclude=
option is given: it used to default to flag and now defaults to true
(i.e. omit excluded messages). This is neccesary to keep the cli
output uncluttered and for speed reasons.
This commit is contained in:
Mark Walters 2012-04-07 17:10:05 +01:00 committed by David Bremner
parent 785c1e497f
commit fd62a25f91
2 changed files with 31 additions and 11 deletions

View file

@ -114,9 +114,15 @@ Limit the number of displayed results to N.
.RS 4 .RS 4
.TP 4 .TP 4
.BR \-\-no\-exclude .BR \-\-exclude=(true|false|flag)
Do not exclude the messages matching search.exclude_tags in the config file. Specify whether to omit messages matching search.tag_exclude from the
search results (the default) or not. The extra option
.B flag
only has an effect when
.B --output=summary
In this case all matching threads are returned but the "match count"
is the number of matching non-excluded messages in the thread.
.RE .RE
.SH SEE ALSO .SH SEE ALSO

View file

@ -210,9 +210,6 @@ do_search_threads (const search_format_t *format,
int first_thread = 1; int first_thread = 1;
int i; int i;
if (output == OUTPUT_THREADS)
notmuch_query_set_omit_excluded_messages (query, TRUE);
if (offset < 0) { if (offset < 0) {
offset += notmuch_query_count_threads (query); offset += notmuch_query_count_threads (query);
if (offset < 0) if (offset < 0)
@ -303,8 +300,6 @@ do_search_messages (const search_format_t *format,
int first_message = 1; int first_message = 1;
int i; int i;
notmuch_query_set_omit_excluded_messages (query, TRUE);
if (offset < 0) { if (offset < 0) {
offset += notmuch_query_count_messages (query); offset += notmuch_query_count_messages (query);
if (offset < 0) if (offset < 0)
@ -376,7 +371,6 @@ do_search_tags (notmuch_database_t *notmuch,
const char *tag; const char *tag;
int first_tag = 1; int first_tag = 1;
notmuch_query_set_omit_excluded_messages (query, TRUE);
/* should the following only special case if no excluded terms /* should the following only special case if no excluded terms
* specified? */ * specified? */
@ -422,6 +416,12 @@ do_search_tags (notmuch_database_t *notmuch,
return 0; return 0;
} }
enum {
EXCLUDE_TRUE,
EXCLUDE_FALSE,
EXCLUDE_FLAG,
};
int int
notmuch_search_command (void *ctx, int argc, char *argv[]) notmuch_search_command (void *ctx, int argc, char *argv[])
{ {
@ -435,7 +435,7 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
output_t output = OUTPUT_SUMMARY; output_t output = OUTPUT_SUMMARY;
int offset = 0; int offset = 0;
int limit = -1; /* unlimited */ int limit = -1; /* unlimited */
notmuch_bool_t no_exclude = FALSE; int exclude = EXCLUDE_TRUE;
unsigned int i; unsigned int i;
enum { NOTMUCH_FORMAT_JSON, NOTMUCH_FORMAT_TEXT } enum { NOTMUCH_FORMAT_JSON, NOTMUCH_FORMAT_TEXT }
@ -457,7 +457,11 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
{ "files", OUTPUT_FILES }, { "files", OUTPUT_FILES },
{ "tags", OUTPUT_TAGS }, { "tags", OUTPUT_TAGS },
{ 0, 0 } } }, { 0, 0 } } },
{ NOTMUCH_OPT_BOOLEAN, &no_exclude, "no-exclude", 'd', 0 }, { NOTMUCH_OPT_KEYWORD, &exclude, "exclude", 'x',
(notmuch_keyword_t []){ { "true", EXCLUDE_TRUE },
{ "false", EXCLUDE_FALSE },
{ "flag", EXCLUDE_FLAG },
{ 0, 0 } } },
{ NOTMUCH_OPT_INT, &offset, "offset", 'O', 0 }, { NOTMUCH_OPT_INT, &offset, "offset", 'O', 0 },
{ NOTMUCH_OPT_INT, &limit, "limit", 'L', 0 }, { NOTMUCH_OPT_INT, &limit, "limit", 'L', 0 },
{ 0, 0, 0, 0, 0 } { 0, 0, 0, 0, 0 }
@ -505,7 +509,15 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
notmuch_query_set_sort (query, sort); notmuch_query_set_sort (query, sort);
if (!no_exclude) { if (exclude == EXCLUDE_FLAG && 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");
exclude = EXCLUDE_FALSE;
}
if (exclude == EXCLUDE_TRUE || exclude == EXCLUDE_FLAG) {
const char **search_exclude_tags; const char **search_exclude_tags;
size_t search_exclude_tags_length; size_t search_exclude_tags_length;
@ -513,6 +525,8 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
(config, &search_exclude_tags_length); (config, &search_exclude_tags_length);
for (i = 0; i < search_exclude_tags_length; i++) for (i = 0; i < search_exclude_tags_length; i++)
notmuch_query_add_tag_exclude (query, search_exclude_tags[i]); notmuch_query_add_tag_exclude (query, search_exclude_tags[i]);
if (exclude == EXCLUDE_FLAG)
notmuch_query_set_omit_excluded (query, FALSE);
} }
switch (output) { switch (output) {