Add NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID
authorCarl Worth <cworth@cworth.org>
Fri, 23 Oct 2009 21:40:33 +0000 (14:40 -0700)
committerCarl Worth <cworth@cworth.org>
Fri, 23 Oct 2009 21:40:33 +0000 (14:40 -0700)
And document that notmuch_database_add_message can return this
value. This pushes the hard decision of what to do with duplicate
messages out to the user, but that's OK. (We weren't really doing
anything with these ourselves, and this way the user is at least
informed of the issue, rather than it just getting papered over
internally.)

database.cc
notmuch.h

index 415040bc7000c4f9cb195e25cb9119d72c15a29d..712ab260225658588f0d427888694c74a5728800 100644 (file)
@@ -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");
index e7039ab188932f02c1d7c35c53d878341bf56825..77ed0328da6d4c8bcd6339b7e387a6b765bf9d7f 100644 (file)
--- 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.