cli/count: update to use notmuch_query_search_messages_st

This brings back status information that may have been hidden by the
great library logging conversion.

Note the change of the internal API / return-value for count_files. The
other count calls to the lib will also get error handling when that API
is updated in the lib.
This commit is contained in:
David Bremner 2015-09-06 10:15:46 -03:00
parent 39c54df26d
commit dca72205ab
2 changed files with 46 additions and 6 deletions

View file

@ -33,17 +33,19 @@ enum {
EXCLUDE_FALSE, EXCLUDE_FALSE,
}; };
static unsigned int /* Return the number of files matching the query, or -1 for an error */
static int
count_files (notmuch_query_t *query) count_files (notmuch_query_t *query)
{ {
notmuch_messages_t *messages; notmuch_messages_t *messages;
notmuch_message_t *message; notmuch_message_t *message;
notmuch_filenames_t *filenames; notmuch_filenames_t *filenames;
unsigned int count = 0; notmuch_status_t status;
int count = 0;
messages = notmuch_query_search_messages (query); status = notmuch_query_search_messages_st (query, &messages);
if (messages == NULL) if (print_status_query ("notmuch count", query, status))
return 0; return -1;
for (; for (;
notmuch_messages_valid (messages); notmuch_messages_valid (messages);
@ -71,6 +73,7 @@ print_count (notmuch_database_t *notmuch, const char *query_str,
{ {
notmuch_query_t *query; notmuch_query_t *query;
size_t i; size_t i;
int count;
unsigned long revision; unsigned long revision;
const char *uuid; const char *uuid;
int ret = 0; int ret = 0;
@ -92,7 +95,13 @@ print_count (notmuch_database_t *notmuch, const char *query_str,
printf ("%u", notmuch_query_count_threads (query)); printf ("%u", notmuch_query_count_threads (query));
break; break;
case OUTPUT_FILES: case OUTPUT_FILES:
printf ("%u", count_files (query)); count = count_files (query);
if (count >= 0) {
printf ("%u", count);
} else {
ret = -1;
goto DONE;
}
break; break;
} }
@ -103,6 +112,7 @@ print_count (notmuch_database_t *notmuch, const char *query_str,
fputs ("\n", stdout); fputs ("\n", stdout);
} }
DONE:
notmuch_query_destroy (query); notmuch_query_destroy (query);
return ret; return ret;

View file

@ -93,5 +93,35 @@ notmuch count --output=messages >>EXPECTED
notmuch count --output=messages tag:inbox >>EXPECTED notmuch count --output=messages tag:inbox >>EXPECTED
test_expect_equal_file EXPECTED OUTPUT test_expect_equal_file EXPECTED OUTPUT
backup_database
test_begin_subtest "error message for database open"
dd if=/dev/zero of="${MAIL_DIR}/.notmuch/xapian/postlist.DB" count=3
notmuch count '*' 2>OUTPUT 1>/dev/null
output=$(sed 's/^\(A Xapian exception [^:]*\):.*$/\1/' OUTPUT)
test_expect_equal "${output}" "A Xapian exception occurred opening database"
restore_database
cat <<EOF > count-files.gdb
set breakpoint pending on
break count_files
commands
shell cp /dev/null ${MAIL_DIR}/.notmuch/xapian/postlist.DB
continue
end
run
EOF
backup_database
test_begin_subtest "error message from query_search_messages"
gdb --batch-silent --return-child-result -x count-files.gdb \
--args notmuch count --output=files '*' 2>OUTPUT 1>/dev/null
cat <<EOF > EXPECTED
notmuch count: A Xapian exception occurred
A Xapian exception occurred performing query
Query string was: *
EOF
sed 's/^\(A Xapian exception [^:]*\):.*$/\1/' < OUTPUT > OUTPUT.clean
test_expect_equal_file EXPECTED OUTPUT.clean
restore_database
test_done test_done