notmuch_message_get_filename: Support old-style filename storage.
authorCarl Worth <cworth@cworth.org>
Thu, 7 Jan 2010 17:22:34 +0000 (09:22 -0800)
committerCarl Worth <cworth@cworth.org>
Thu, 7 Jan 2010 17:22:34 +0000 (09:22 -0800)
When a notmuch database is upgraded to the new database format, (to
support file rename and deletion), any message documents corresponding
to deleted files will not currently be upgraded. This means that a
search matching these documents will find no filenames in the expected
place.

Go ahead and return the filename as originally stored, (rather than
aborting with an internal error), in this case.

lib/message.cc

index 82e8fce7edca3953a6503b5d2f5e7e76208c5200..0fc54668cb9a362454551d8880bade40b7c6583e 100644 (file)
@@ -441,7 +441,19 @@ notmuch_message_get_filename (notmuch_message_t *message)
     if (i == message->doc.termlist_end () ||
        strncmp (direntry, prefix, prefix_len))
     {
-       INTERNAL_ERROR ("message with no filename");
+       /* A message document created by an old version of notmuch
+        * (prior to rename support) will have the filename in the
+        * data of the document rather than as a file-direntry term. */
+       const char *data;
+
+       data = message->doc.get_data ().c_str ();
+
+       if (data == NULL)
+           INTERNAL_ERROR ("message with no filename");
+
+       message->filename = talloc_strdup (message, data);
+
+       return message->filename;
     }
 
     direntry += prefix_len;