lib: add NOTMUCH_STATUS_PATH_ERROR

The difference with FILE_ERROR is that this is for things that are
wrong with the path before looking at the disk.

Add some 3 tests; two broken as a reminder to actually use this new
code.
This commit is contained in:
David Bremner 2015-06-10 07:58:44 +02:00
parent a5a21bbe78
commit b59ad1a9cc
4 changed files with 48 additions and 3 deletions

View file

@ -342,6 +342,8 @@ notmuch_status_to_string (notmuch_status_t status)
return "Unsupported operation"; return "Unsupported operation";
case NOTMUCH_STATUS_UPGRADE_REQUIRED: case NOTMUCH_STATUS_UPGRADE_REQUIRED:
return "Operation requires a database upgrade"; return "Operation requires a database upgrade";
case NOTMUCH_STATUS_PATH_ERROR:
return "Path supplied is illegal for this function";
default: default:
case NOTMUCH_STATUS_LAST_STATUS: case NOTMUCH_STATUS_LAST_STATUS:
return "Unknown error status value"; return "Unknown error status value";

View file

@ -163,6 +163,11 @@ typedef enum _notmuch_status {
* The operation requires a database upgrade. * The operation requires a database upgrade.
*/ */
NOTMUCH_STATUS_UPGRADE_REQUIRED, NOTMUCH_STATUS_UPGRADE_REQUIRED,
/**
* There is a problem with the proposed path, e.g. a relative path
* passed to a function expecting an absolute path.
*/
NOTMUCH_STATUS_PATH_ERROR,
/** /**
* Not an actual status value. Just a way to find out how many * Not an actual status value. Just a way to find out how many
* valid status values there are. * valid status values there are.

View file

@ -188,7 +188,7 @@ notmuch config set new.tags $OLDCONFIG
# DUPLICATE_MESSAGE_ID is not tested here, because it should actually pass. # DUPLICATE_MESSAGE_ID is not tested here, because it should actually pass.
for code in OUT_OF_MEMORY XAPIAN_EXCEPTION FILE_NOT_EMAIL \ for code in OUT_OF_MEMORY XAPIAN_EXCEPTION FILE_NOT_EMAIL \
READ_ONLY_DATABASE UPGRADE_REQUIRED; do READ_ONLY_DATABASE UPGRADE_REQUIRED PATH_ERROR; do
gen_insert_msg gen_insert_msg
cat <<EOF > index-file-$code.gdb cat <<EOF > index-file-$code.gdb
set breakpoint pending on set breakpoint pending on

View file

@ -35,7 +35,8 @@ Error: Cannot open a database for a NULL path.
EOF EOF
test_expect_equal_file EXPECTED OUTPUT test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "Open nonexistent database" test_begin_subtest "Open relative path"
test_subtest_known_broken
test_C <<'EOF' test_C <<'EOF'
#include <stdio.h> #include <stdio.h>
#include <notmuch.h> #include <notmuch.h>
@ -49,7 +50,44 @@ EOF
cat <<'EOF' >EXPECTED cat <<'EOF' >EXPECTED
== stdout == == stdout ==
== stderr == == stderr ==
Error opening database at ./nonexistent/foo/.notmuch: No such file or directory Error: Database path must be absolute.
EOF
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "Create database in relative path"
test_subtest_known_broken
test_C <<'EOF'
#include <stdio.h>
#include <notmuch.h>
int main (int argc, char** argv)
{
notmuch_database_t *db;
notmuch_status_t stat;
stat = notmuch_database_create ("./nonexistent/foo", &db);
}
EOF
cat <<'EOF' >EXPECTED
== stdout ==
== stderr ==
Error: Database path must be absolute.
EOF
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "Open nonexistent database"
test_C ${PWD}/nonexistent/foo <<'EOF'
#include <stdio.h>
#include <notmuch.h>
int main (int argc, char** argv)
{
notmuch_database_t *db;
notmuch_status_t stat;
stat = notmuch_database_open (argv[1], 0, 0);
}
EOF
cat <<'EOF' >EXPECTED
== stdout ==
== stderr ==
Error opening database at CWD/nonexistent/foo/.notmuch: No such file or directory
EOF EOF
test_expect_equal_file EXPECTED OUTPUT test_expect_equal_file EXPECTED OUTPUT