lib: catch exceptions in n_m_get_flag, provide n_m_get_flag_st

It's not very nice to return FALSE for an error, so provide
notmuch_message_get_flag_st as a migration path.

Bump LIBNOTMUCH_MINOR_VERSION because the API is extended.
This commit is contained in:
David Bremner 2020-07-04 12:18:05 -03:00
parent 13116c5ced
commit 2d04ed2631
3 changed files with 55 additions and 6 deletions

View file

@ -1166,15 +1166,40 @@ notmuch_message_count_files (notmuch_message_t *message)
return _notmuch_string_list_length (message->filename_list); return _notmuch_string_list_length (message->filename_list);
} }
notmuch_status_t
notmuch_message_get_flag_st (notmuch_message_t *message,
notmuch_message_flag_t flag,
notmuch_bool_t *is_set)
{
if (! is_set)
return NOTMUCH_STATUS_NULL_POINTER;
try {
if (flag == NOTMUCH_MESSAGE_FLAG_GHOST &&
! NOTMUCH_TEST_BIT (message->lazy_flags, flag))
_notmuch_message_ensure_metadata (message, NULL);
} catch (Xapian::Error &error) {
LOG_XAPIAN_EXCEPTION (message, error);
return NOTMUCH_STATUS_XAPIAN_EXCEPTION;
}
*is_set = NOTMUCH_TEST_BIT (message->flags, flag);
return NOTMUCH_STATUS_SUCCESS;
}
notmuch_bool_t notmuch_bool_t
notmuch_message_get_flag (notmuch_message_t *message, notmuch_message_get_flag (notmuch_message_t *message,
notmuch_message_flag_t flag) notmuch_message_flag_t flag)
{ {
if (flag == NOTMUCH_MESSAGE_FLAG_GHOST && notmuch_bool_t is_set;
! NOTMUCH_TEST_BIT (message->lazy_flags, flag)) notmuch_status_t status;
_notmuch_message_ensure_metadata (message, NULL);
return NOTMUCH_TEST_BIT (message->flags, flag); status = notmuch_message_get_flag_st (message, flag, &is_set);
if (status)
return FALSE;
else
return is_set;
} }
void void

View file

@ -58,7 +58,7 @@ NOTMUCH_BEGIN_DECLS
* version in Makefile.local. * version in Makefile.local.
*/ */
#define LIBNOTMUCH_MAJOR_VERSION 5 #define LIBNOTMUCH_MAJOR_VERSION 5
#define LIBNOTMUCH_MINOR_VERSION 2 #define LIBNOTMUCH_MINOR_VERSION 3
#define LIBNOTMUCH_MICRO_VERSION 0 #define LIBNOTMUCH_MICRO_VERSION 0
@ -1486,11 +1486,36 @@ typedef enum _notmuch_message_flag {
/** /**
* Get a value of a flag for the email corresponding to 'message'. * Get a value of a flag for the email corresponding to 'message'.
*
* returns FALSE in case of errors.
*
* @deprecated Deprecated as of libnotmuch 5.3 (notmuch 0.31). Please
* use notmuch_message_get_flag_st instead.
*/ */
NOTMUCH_DEPRECATED(5,3)
notmuch_bool_t notmuch_bool_t
notmuch_message_get_flag (notmuch_message_t *message, notmuch_message_get_flag (notmuch_message_t *message,
notmuch_message_flag_t flag); notmuch_message_flag_t flag);
/**
* Get a value of a flag for the email corresponding to 'message'.
*
* @param message a message object
* @param flag flag to check
* @param is_set pointer to boolean to store flag value.
*
* @retval #NOTMUCH_STATUS_SUCCESS
* @retval #NOTMUCH_STATUS_NULL_POINTER is_set is NULL
* @retval #NOTMUCH_STATUS_XAPIAN_EXCEPTION Accessing the database
* triggered an exception.
*
* @since libnotmuch 5.3 (notmuch 0.31)
*/
notmuch_status_t
notmuch_message_get_flag_st (notmuch_message_t *message,
notmuch_message_flag_t flag,
notmuch_bool_t *is_set);
/** /**
* Set a value of a flag for the email corresponding to 'message'. * Set a value of a flag for the email corresponding to 'message'.
*/ */

View file

@ -438,7 +438,6 @@ EOF
test_expect_equal_file EXPECTED OUTPUT test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "Handle getting ghost flag from closed database" test_begin_subtest "Handle getting ghost flag from closed database"
test_subtest_known_broken
cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
{ {
notmuch_bool_t result; notmuch_bool_t result;