CLI/new: drop the write lock to run the pre-new hook.

This fixes a bug reported in [1]. In principle it could be possible
avoid one of these reopens, but it complicates the logic in main with
respect to creating new databases.

[1]: id:9C1993DF-84BD-4199-A9C8-BADA98498812@bubblegen.co.uk
This commit is contained in:
David Bremner 2021-03-18 22:58:02 -03:00
parent 7d286f0272
commit a9f74aeeb9
2 changed files with 10 additions and 1 deletions

View file

@ -1170,9 +1170,19 @@ notmuch_new_command (unused(notmuch_config_t *config), notmuch_database_t *notmu
} }
if (hooks) { if (hooks) {
/* Drop write lock to run hook */
status = notmuch_database_reopen (notmuch, NOTMUCH_DATABASE_MODE_READ_ONLY);
if (print_status_database ("notmuch new", notmuch, status))
return EXIT_FAILURE;
ret = notmuch_run_hook (notmuch, "pre-new"); ret = notmuch_run_hook (notmuch, "pre-new");
if (ret) if (ret)
return EXIT_FAILURE; return EXIT_FAILURE;
/* acquire write lock again */
status = notmuch_database_reopen (notmuch, NOTMUCH_DATABASE_MODE_READ_WRITE);
if (print_status_database ("notmuch new", notmuch, status))
return EXIT_FAILURE;
} }
notmuch_exit_if_unmatched_db_uuid (notmuch); notmuch_exit_if_unmatched_db_uuid (notmuch);

View file

@ -159,7 +159,6 @@ EOF
test_expect_equal_file write.expected write.output test_expect_equal_file write.expected write.output
test_begin_subtest "pre-new with write access [${config}]" test_begin_subtest "pre-new with write access [${config}]"
test_subtest_known_broken
rm -rf ${HOOK_DIR} rm -rf ${HOOK_DIR}
create_write_hook "pre-new" write.expected write.output $HOOK_DIR create_write_hook "pre-new" write.expected write.output $HOOK_DIR
NOTMUCH_NEW NOTMUCH_NEW