mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 04:18:08 +01:00
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:
parent
39c54df26d
commit
dca72205ab
2 changed files with 46 additions and 6 deletions
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue