mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
show: workaround for the missing file problem
This patch fixes the 'Deleted first duplicate file does not stop notmuch show from working' test. If a message to be shown has several duplicated files, and for some reason the first file in the list is not available anymore, notmuch will exit with an error. This is clearly a problem in the database, but we are not going to let this problem be a show-stopper. Let's walk through the list, and show the first existing file. Signed-off-by: Yuri Volchkov <yuri.volchkov@gmail.com>
This commit is contained in:
parent
39cc84e9fc
commit
09fa51303c
2 changed files with 24 additions and 5 deletions
28
mime-node.c
28
mime-node.c
|
@ -79,12 +79,32 @@ mime_node_open (const void *ctx, notmuch_message_t *message,
|
|||
}
|
||||
talloc_set_destructor (mctx, _mime_node_context_free);
|
||||
|
||||
/* Fast path */
|
||||
mctx->file = fopen (filename, "r");
|
||||
if (! mctx->file) {
|
||||
fprintf (stderr, "Error opening %s: %s\n", filename, strerror (errno));
|
||||
status = NOTMUCH_STATUS_FILE_ERROR;
|
||||
goto DONE;
|
||||
}
|
||||
/* Slow path - for some reason the first file in the list is
|
||||
* not available anymore. This is clearly a problem in the
|
||||
* database, but we are not going to let this problem be a
|
||||
* show stopper */
|
||||
notmuch_filenames_t *filenames;
|
||||
for (filenames = notmuch_message_get_filenames (message);
|
||||
notmuch_filenames_valid (filenames);
|
||||
notmuch_filenames_move_to_next (filenames))
|
||||
{
|
||||
filename = notmuch_filenames_get (filenames);
|
||||
mctx->file = fopen (filename, "r");
|
||||
if (mctx->file)
|
||||
break;
|
||||
}
|
||||
|
||||
talloc_free (filenames);
|
||||
if (! mctx->file) {
|
||||
/* Give up */
|
||||
fprintf (stderr, "Error opening %s: %s\n", filename, strerror (errno));
|
||||
status = NOTMUCH_STATUS_FILE_ERROR;
|
||||
goto DONE;
|
||||
}
|
||||
}
|
||||
|
||||
mctx->stream = g_mime_stream_file_new (mctx->file);
|
||||
if (!mctx->stream) {
|
||||
|
|
|
@ -39,7 +39,6 @@ test_expect_equal_file EXPECTED OUTPUT
|
|||
|
||||
rm ${MAIL_DIR}/copy1
|
||||
test_begin_subtest 'Deleted first duplicate file does not stop notmuch show from working'
|
||||
test_subtest_known_broken
|
||||
output=$(notmuch show --body=false --format=json id:duplicate)
|
||||
expected='[[[{
|
||||
"id": "'duplicate'",
|
||||
|
|
Loading…
Reference in a new issue