diff --git a/lib/database-private.h b/lib/database-private.h index 0c08fa15..657b1aa1 100644 --- a/lib/database-private.h +++ b/lib/database-private.h @@ -165,6 +165,7 @@ typedef enum { NOTMUCH_FIELD_EXTERNAL = 1 << 0, NOTMUCH_FIELD_PROBABILISTIC = 1 << 1, NOTMUCH_FIELD_PROCESSOR = 1 << 2, + NOTMUCH_FIELD_STRIP_TRAILING_SLASH = 1 << 3, } notmuch_field_flag_t; /* diff --git a/lib/prefix.cc b/lib/prefix.cc index 0d92bdd7..857c05b9 100644 --- a/lib/prefix.cc +++ b/lib/prefix.cc @@ -46,7 +46,7 @@ prefix_t prefix_table[] = { { "mid", "Q", NOTMUCH_FIELD_EXTERNAL | NOTMUCH_FIELD_PROCESSOR }, { "path", "P", NOTMUCH_FIELD_EXTERNAL | - NOTMUCH_FIELD_PROCESSOR }, + NOTMUCH_FIELD_PROCESSOR | NOTMUCH_FIELD_STRIP_TRAILING_SLASH }, { "property", "XPROPERTY", NOTMUCH_FIELD_EXTERNAL }, /* * Unconditionally add ':' to reduce potential ambiguity with @@ -55,7 +55,7 @@ prefix_t prefix_table[] = { * discussion. */ { "folder", "XFOLDER:", NOTMUCH_FIELD_EXTERNAL | - NOTMUCH_FIELD_PROCESSOR }, + NOTMUCH_FIELD_PROCESSOR | NOTMUCH_FIELD_STRIP_TRAILING_SLASH }, { "date", NULL, NOTMUCH_FIELD_EXTERNAL | NOTMUCH_FIELD_PROCESSOR }, { "query", NULL, NOTMUCH_FIELD_EXTERNAL | diff --git a/lib/regexp-fields.cc b/lib/regexp-fields.cc index c6d9d94f..7e9d959c 100644 --- a/lib/regexp-fields.cc +++ b/lib/regexp-fields.cc @@ -235,7 +235,15 @@ RegexpFieldProcessor::operator() (const std::string & str) return parser.parse_query (query_str, NOTMUCH_QUERY_PARSER_FLAGS, term_prefix); } else { /* Boolean prefix */ - std::string term = term_prefix + str; + std::string query_str; + std::string term; + + if (str.length () > 1 && str.at (str.size () - 1) == '/') + query_str = str.substr (0, str.size () - 1); + else + query_str = str; + + term = term_prefix + query_str; return Xapian::Query (term); } } diff --git a/test/T100-search-by-folder.sh b/test/T100-search-by-folder.sh index fbc68266..0123d0b2 100755 --- a/test/T100-search-by-folder.sh +++ b/test/T100-search-by-folder.sh @@ -32,7 +32,6 @@ test_expect_equal "$output" "MAIL_DIR/bad/news/msg-XXX MAIL_DIR/duplicate/bad/news/msg-XXX" test_begin_subtest "Folder search with --output=files (trailing /)" -test_subtest_known_broken output=$(notmuch search --output=files folder:bad/news/ | notmuch_search_files_sanitize) test_expect_equal "$output" "MAIL_DIR/bad/news/msg-XXX MAIL_DIR/duplicate/bad/news/msg-XXX" @@ -127,7 +126,6 @@ MAIL_DIR/bar/18:2, MAIL_DIR/cur/51:2," test_begin_subtest "path: search (trailing /)" -test_subtest_known_broken output=$(notmuch search --output=files path:"bar/" | notmuch_search_files_sanitize | sort) # cur/51:2, is a duplicate of bar/18:2, test_expect_equal "$output" "MAIL_DIR/bar/17:2,