diff --git a/database.cc b/database.cc index 415040bc..712ab260 100644 --- a/database.cc +++ b/database.cc @@ -40,6 +40,8 @@ notmuch_status_to_string (notmuch_status_t status) return "Something went wrong trying to read or write a file"; case NOTMUCH_STATUS_FILE_NOT_EMAIL: return "File is not an email"; + case NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID: + return "Message ID is identical to a message in database"; case NOTMUCH_STATUS_NULL_POINTER: return "Erroneous NULL pointer"; case NOTMUCH_STATUS_TAG_TOO_LONG: @@ -656,23 +658,8 @@ notmuch_database_add_message (notmuch_database_t *notmuch, /* Has a message previously been added with the same ID? */ old_filename = notmuch_message_get_filename (message); if (old_filename && strlen (old_filename)) { - /* XXX: This is too noisy to actually print, and what do we - * really expect the user to do? Go manually delete a - * redundant message or merge two similar messages? - * Instead we should handle this transparently. - * - * What we likely want to move to is adding both filenames - * to the database so that subsequent indexing will pick up - * terms from both files. - */ -#if 0 - fprintf (stderr, - "Note: Attempting to add a message with a duplicate message ID:\n" - "Old: %s\n" "New: %s\n", - old_filename, filename); - fprintf (stderr, "The old filename will be used, but any new terms\n" - "from the new message will added to the database.\n"); -#endif + ret = NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID; + goto DONE; } else { _notmuch_message_set_filename (message, filename); _notmuch_message_add_term (message, "type", "mail"); diff --git a/notmuch.h b/notmuch.h index e7039ab1..77ed0328 100644 --- a/notmuch.h +++ b/notmuch.h @@ -64,6 +64,9 @@ typedef int notmuch_bool_t; * NOTMUCH_STATUS_FILE_NOT_EMAIL: A file was presented that doesn't * appear to be an email message. * + * NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID: A file contains a message ID + * that is identical to a message already in the database. + * * NOTMUCH_STATUS_NULL_POINTER: The user erroneously passed a NULL * pointer to a notmuch function. * @@ -78,6 +81,7 @@ typedef enum _notmuch_status { NOTMUCH_STATUS_XAPIAN_EXCEPTION, NOTMUCH_STATUS_FILE_ERROR, NOTMUCH_STATUS_FILE_NOT_EMAIL, + NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID, NOTMUCH_STATUS_NULL_POINTER, NOTMUCH_STATUS_TAG_TOO_LONG, @@ -239,6 +243,10 @@ notmuch_database_get_timestamp (notmuch_database_t *database, * * NOTMUCH_STATUS_SUCCESS: Message successfully added to database. * + * NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID: Message has the same message + * ID as another message already in the database. Nothing added + * to the database. + * * NOTMUCH_STATUS_FILE_ERROR: an error occurred trying to open the * file, (such as permission denied, or file not found, * etc.). Nothing added to the database.