X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=test%2FT050-new.sh;h=2035d29f529aa8c93922d5f98827fc12c5fd6cec;hb=c5356b9ed56e42d36ca18206155b62c94cfbd79d;hp=625739232369bb9783e7aa41cf25417dba6604d0;hpb=33c8777a967ece2dd4bbda7e83a4e07c195abf51;p=notmuch diff --git a/test/T050-new.sh b/test/T050-new.sh index 62573923..2035d29f 100755 --- a/test/T050-new.sh +++ b/test/T050-new.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash test_description='"notmuch new" in several variations' -. ./test-lib.sh || exit 1 +. $(dirname "$0")/test-lib.sh || exit 1 test_begin_subtest "No new messages" output=$(NOTMUCH_NEW --debug) @@ -64,7 +64,7 @@ generate_message notmuch new > /dev/null mv "$gen_msg_filename" "${gen_msg_filename}"-renamed output=$(NOTMUCH_NEW --debug) -test_expect_equal "$output" "(D) add_files_recursive, pass 2: queuing passed file ${gen_msg_filename} for deletion from database +test_expect_equal "$output" "(D) add_files, pass 2: queuing passed file ${gen_msg_filename} for deletion from database No new mail. Detected 1 file rename." @@ -72,7 +72,7 @@ test_begin_subtest "Deleted message" rm "${gen_msg_filename}"-renamed output=$(NOTMUCH_NEW --debug) -test_expect_equal "$output" "(D) add_files_recursive, pass 3: queuing leftover file ${gen_msg_filename}-renamed for deletion from database +test_expect_equal "$output" "(D) add_files, pass 3: queuing leftover file ${gen_msg_filename}-renamed for deletion from database No new mail. Removed 1 message." @@ -88,21 +88,19 @@ notmuch new > /dev/null mv "${MAIL_DIR}"/dir "${MAIL_DIR}"/dir-renamed output=$(NOTMUCH_NEW --debug) -test_expect_equal "$output" "(D) add_files_recursive, pass 2: queuing passed directory ${MAIL_DIR}/dir for deletion from database +test_expect_equal "$output" "(D) add_files, pass 2: queuing passed directory ${MAIL_DIR}/dir for deletion from database No new mail. Detected 3 file renames." test_begin_subtest "Deleted directory" -test_subtest_known_broken rm -rf "${MAIL_DIR}"/dir-renamed output=$(NOTMUCH_NEW --debug) -test_expect_equal "$output" "(D) add_files_recursive, pass 2: queuing passed directory ${MAIL_DIR}/dir-renamed for deletion from database +test_expect_equal "$output" "(D) add_files, pass 2: queuing passed directory ${MAIL_DIR}/dir-renamed for deletion from database No new mail. Removed 3 messages." test_begin_subtest "New directory (at end of list)" -test_subtest_known_broken generate_message [dir]=zzz generate_message [dir]=zzz @@ -114,11 +112,10 @@ test_expect_equal "$output" "Added 3 new messages to the database." test_begin_subtest "Deleted directory (end of list)" -test_subtest_known_broken rm -rf "${MAIL_DIR}"/zzz output=$(NOTMUCH_NEW --debug) -test_expect_equal "$output" "(D) add_files_recursive, pass 3: queuing leftover directory ${MAIL_DIR}/zzz for deletion from database +test_expect_equal "$output" "(D) add_files, pass 3: queuing leftover directory ${MAIL_DIR}/zzz for deletion from database No new mail. Removed 3 messages." @@ -169,11 +166,19 @@ test_begin_subtest "Deleted two-level directory" rm -rf "${MAIL_DIR}"/two output=$(NOTMUCH_NEW --debug) -test_expect_equal "$output" "(D) add_files_recursive, pass 3: queuing leftover directory ${MAIL_DIR}/two for deletion from database +test_expect_equal "$output" "(D) add_files, pass 3: queuing leftover directory ${MAIL_DIR}/two for deletion from database No new mail. Removed 3 messages." +test_begin_subtest "One character directory at top level" + +generate_message [dir]=A +generate_message [dir]=A/B +generate_message [dir]=A/B/C + +output=$(NOTMUCH_NEW --debug) +test_expect_equal "$output" "Added 3 new messages to the database." + test_begin_subtest "Support single-message mbox" -test_subtest_known_broken cat > "${MAIL_DIR}"/mbox_file1 < @@ -187,7 +192,6 @@ test_expect_equal "$output" "Added 1 new message to the database." # This test requires that notmuch new has been run at least once. test_begin_subtest "Skip and report non-mail files" -test_subtest_known_broken generate_message mkdir -p "${MAIL_DIR}"/.git && touch "${MAIL_DIR}"/.git/config touch "${MAIL_DIR}"/ignored_file @@ -232,21 +236,20 @@ mkdir -p "${MAIL_DIR}"/one/two/three/.git touch "${MAIL_DIR}"/{one,one/two,one/two/three}/ignored_file output=$(NOTMUCH_NEW --debug 2>&1 | sort) test_expect_equal "$output" \ -"(D) add_files_recursive, pass 1: explicitly ignoring ${MAIL_DIR}/.git -(D) add_files_recursive, pass 1: explicitly ignoring ${MAIL_DIR}/.ignored_hidden_file -(D) add_files_recursive, pass 1: explicitly ignoring ${MAIL_DIR}/ignored_file -(D) add_files_recursive, pass 1: explicitly ignoring ${MAIL_DIR}/one/ignored_file -(D) add_files_recursive, pass 1: explicitly ignoring ${MAIL_DIR}/one/two/ignored_file -(D) add_files_recursive, pass 1: explicitly ignoring ${MAIL_DIR}/one/two/three/.git -(D) add_files_recursive, pass 1: explicitly ignoring ${MAIL_DIR}/one/two/three/ignored_file -(D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/.git -(D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/.ignored_hidden_file -(D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/ignored_file -(D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/one/ignored_file -(D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/one/two/ignored_file -(D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/one/two/three/.git -(D) add_files_recursive, pass 2: explicitly ignoring ${MAIL_DIR}/one/two/three/ignored_file -(D) add_files_recursive, pass 3: queuing leftover directory ${MAIL_DIR}/two for deletion from database +"(D) add_files, pass 1: explicitly ignoring ${MAIL_DIR}/.git +(D) add_files, pass 1: explicitly ignoring ${MAIL_DIR}/.ignored_hidden_file +(D) add_files, pass 1: explicitly ignoring ${MAIL_DIR}/ignored_file +(D) add_files, pass 1: explicitly ignoring ${MAIL_DIR}/one/ignored_file +(D) add_files, pass 1: explicitly ignoring ${MAIL_DIR}/one/two/ignored_file +(D) add_files, pass 1: explicitly ignoring ${MAIL_DIR}/one/two/three/.git +(D) add_files, pass 1: explicitly ignoring ${MAIL_DIR}/one/two/three/ignored_file +(D) add_files, pass 2: explicitly ignoring ${MAIL_DIR}/.git +(D) add_files, pass 2: explicitly ignoring ${MAIL_DIR}/.ignored_hidden_file +(D) add_files, pass 2: explicitly ignoring ${MAIL_DIR}/ignored_file +(D) add_files, pass 2: explicitly ignoring ${MAIL_DIR}/one/ignored_file +(D) add_files, pass 2: explicitly ignoring ${MAIL_DIR}/one/two/ignored_file +(D) add_files, pass 2: explicitly ignoring ${MAIL_DIR}/one/two/three/.git +(D) add_files, pass 2: explicitly ignoring ${MAIL_DIR}/one/two/three/ignored_file No new mail." @@ -283,16 +286,50 @@ notmuch config set new.tags "-foo;bar" output=$(NOTMUCH_NEW --debug 2>&1) test_expect_equal "$output" "Error: tag '-foo' in new.tags: tag starting with '-' forbidden" -test_expect_code 1 "Invalid tags set exit code" \ - "NOTMUCH_NEW --debug 2>&1" +test_begin_subtest "Invalid tags set exit code" +test_expect_code 1 "NOTMUCH_NEW --debug 2>&1" notmuch config set new.tags $OLDCONFIG test_begin_subtest "Xapian exception: read only files" -chmod u-w ${MAIL_DIR}/.notmuch/xapian/*.DB +chmod u-w ${MAIL_DIR}/.notmuch/xapian/*.${db_ending} output=$(NOTMUCH_NEW --debug 2>&1 | sed 's/: .*$//' ) -chmod u+w ${MAIL_DIR}/.notmuch/xapian/*.DB +chmod u+w ${MAIL_DIR}/.notmuch/xapian/*.${db_ending} test_expect_equal "$output" "A Xapian exception occurred opening database" + +test_begin_subtest "Handle files vanishing between scandir and add_file" + +# A file for scandir to find. It won't get indexed, so can be empty. +touch ${MAIL_DIR}/vanish + +# Breakpoint to remove the file before indexing +cat < notmuch-new-vanish.gdb +set breakpoint pending on +set logging file notmuch-new-vanish-gdb.log +set logging on +break notmuch_database_index_file +commands +shell rm -f ${MAIL_DIR}/vanish +continue +end +run +EOF + +${TEST_GDB} --batch-silent --return-child-result -x notmuch-new-vanish.gdb \ + --args notmuch new 2>OUTPUT 1>/dev/null +echo "exit status: $?" >> OUTPUT + +# Clean up the file in case gdb isn't available. +rm -f ${MAIL_DIR}/vanish + +cat < EXPECTED +Unexpected error with file ${MAIL_DIR}/vanish +add_file: Something went wrong trying to read or write a file +Error opening ${MAIL_DIR}/vanish: No such file or directory +exit status: 75 +EOF +test_expect_equal_file EXPECTED OUTPUT + test_done