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

View file

@ -93,5 +93,35 @@ notmuch count --output=messages >>EXPECTED
notmuch count --output=messages tag:inbox >>EXPECTED
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