diff options
-rw-r--r-- | lib/PublicInbox/SolverGit.pm | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/PublicInbox/SolverGit.pm b/lib/PublicInbox/SolverGit.pm index 59d2c93c..c5025269 100644 --- a/lib/PublicInbox/SolverGit.pm +++ b/lib/PublicInbox/SolverGit.pm @@ -170,6 +170,13 @@ sub extract_diff ($$$$$) { sub path_searchable ($) { defined($_[0]) && $_[0] =~ m!\A[\w/\. \-]+\z! } +# ".." appears in path names, which confuses Xapian into treating +# it as a range query. So we split on ".." since Xapian breaks +# on punctuation anyways: +sub filename_query ($) { + join('', map { qq( dfn:"$_") } split(/\.\./, $_[0])); +} + sub find_extract_diff ($$$) { my ($self, $ibx, $want) = @_; my $srch = $ibx->search or return; @@ -187,11 +194,11 @@ sub find_extract_diff ($$$) { my $path_b = $want->{path_b}; if (path_searchable($path_b)) { - $q .= qq{ dfn:"$path_b"}; + $q .= filename_query($path_b); my $path_a = $want->{path_a}; if (path_searchable($path_a) && $path_a ne $path_b) { - $q .= qq{ dfn:"$path_a"}; + $q .= filename_query($path_a); } } |