mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-24 20:08:10 +01:00
lib: drop trailing slash for path and folder searches (infix)
This resolves an old bug reported by David Edmondson in 2014. The fix is only needed for the "boolean" case, as probabilistic / phrase searching already ignores punctuation. This fix is only for the infix (xapian provided) query parser. [1]: id:cunoasuolcv.fsf@gargravarr.hh.sledj.net
This commit is contained in:
parent
c73e273aaf
commit
c62c22c9fb
4 changed files with 12 additions and 5 deletions
|
@ -165,6 +165,7 @@ typedef enum {
|
||||||
NOTMUCH_FIELD_EXTERNAL = 1 << 0,
|
NOTMUCH_FIELD_EXTERNAL = 1 << 0,
|
||||||
NOTMUCH_FIELD_PROBABILISTIC = 1 << 1,
|
NOTMUCH_FIELD_PROBABILISTIC = 1 << 1,
|
||||||
NOTMUCH_FIELD_PROCESSOR = 1 << 2,
|
NOTMUCH_FIELD_PROCESSOR = 1 << 2,
|
||||||
|
NOTMUCH_FIELD_STRIP_TRAILING_SLASH = 1 << 3,
|
||||||
} notmuch_field_flag_t;
|
} notmuch_field_flag_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -46,7 +46,7 @@ prefix_t prefix_table[] = {
|
||||||
{ "mid", "Q", NOTMUCH_FIELD_EXTERNAL |
|
{ "mid", "Q", NOTMUCH_FIELD_EXTERNAL |
|
||||||
NOTMUCH_FIELD_PROCESSOR },
|
NOTMUCH_FIELD_PROCESSOR },
|
||||||
{ "path", "P", NOTMUCH_FIELD_EXTERNAL |
|
{ "path", "P", NOTMUCH_FIELD_EXTERNAL |
|
||||||
NOTMUCH_FIELD_PROCESSOR },
|
NOTMUCH_FIELD_PROCESSOR | NOTMUCH_FIELD_STRIP_TRAILING_SLASH },
|
||||||
{ "property", "XPROPERTY", NOTMUCH_FIELD_EXTERNAL },
|
{ "property", "XPROPERTY", NOTMUCH_FIELD_EXTERNAL },
|
||||||
/*
|
/*
|
||||||
* Unconditionally add ':' to reduce potential ambiguity with
|
* Unconditionally add ':' to reduce potential ambiguity with
|
||||||
|
@ -55,7 +55,7 @@ prefix_t prefix_table[] = {
|
||||||
* discussion.
|
* discussion.
|
||||||
*/
|
*/
|
||||||
{ "folder", "XFOLDER:", NOTMUCH_FIELD_EXTERNAL |
|
{ "folder", "XFOLDER:", NOTMUCH_FIELD_EXTERNAL |
|
||||||
NOTMUCH_FIELD_PROCESSOR },
|
NOTMUCH_FIELD_PROCESSOR | NOTMUCH_FIELD_STRIP_TRAILING_SLASH },
|
||||||
{ "date", NULL, NOTMUCH_FIELD_EXTERNAL |
|
{ "date", NULL, NOTMUCH_FIELD_EXTERNAL |
|
||||||
NOTMUCH_FIELD_PROCESSOR },
|
NOTMUCH_FIELD_PROCESSOR },
|
||||||
{ "query", NULL, NOTMUCH_FIELD_EXTERNAL |
|
{ "query", NULL, NOTMUCH_FIELD_EXTERNAL |
|
||||||
|
|
|
@ -235,7 +235,15 @@ RegexpFieldProcessor::operator() (const std::string & str)
|
||||||
return parser.parse_query (query_str, NOTMUCH_QUERY_PARSER_FLAGS, term_prefix);
|
return parser.parse_query (query_str, NOTMUCH_QUERY_PARSER_FLAGS, term_prefix);
|
||||||
} else {
|
} else {
|
||||||
/* Boolean prefix */
|
/* 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);
|
return Xapian::Query (term);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,6 @@ test_expect_equal "$output" "MAIL_DIR/bad/news/msg-XXX
|
||||||
MAIL_DIR/duplicate/bad/news/msg-XXX"
|
MAIL_DIR/duplicate/bad/news/msg-XXX"
|
||||||
|
|
||||||
test_begin_subtest "Folder search with --output=files (trailing /)"
|
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)
|
output=$(notmuch search --output=files folder:bad/news/ | notmuch_search_files_sanitize)
|
||||||
test_expect_equal "$output" "MAIL_DIR/bad/news/msg-XXX
|
test_expect_equal "$output" "MAIL_DIR/bad/news/msg-XXX
|
||||||
MAIL_DIR/duplicate/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,"
|
MAIL_DIR/cur/51:2,"
|
||||||
|
|
||||||
test_begin_subtest "path: search (trailing /)"
|
test_begin_subtest "path: search (trailing /)"
|
||||||
test_subtest_known_broken
|
|
||||||
output=$(notmuch search --output=files path:"bar/" | notmuch_search_files_sanitize | sort)
|
output=$(notmuch search --output=files path:"bar/" | notmuch_search_files_sanitize | sort)
|
||||||
# cur/51:2, is a duplicate of bar/18:2,
|
# cur/51:2, is a duplicate of bar/18:2,
|
||||||
test_expect_equal "$output" "MAIL_DIR/bar/17:2,
|
test_expect_equal "$output" "MAIL_DIR/bar/17:2,
|
||||||
|
|
Loading…
Reference in a new issue