]> Sergey Matveev's repositories - public-inbox.git/commitdiff
solvergit: don't confuse Xapian with ".." in filenames
authorEric Wong <e@80x24.org>
Wed, 30 Jan 2019 10:33:55 +0000 (10:33 +0000)
committerEric Wong <e@80x24.org>
Wed, 30 Jan 2019 10:33:55 +0000 (10:33 +0000)
Xapian will interpret ".." as ranges, even quoted phrases.
So break up words on ".." since punctuation (AFAIK) is not
searchable, anyways.

lib/PublicInbox/SolverGit.pm

index 59d2c93ca4274af1b831e9b15a1a86e9cb8bd538..c5025269187b0fe6b61122e96bcba2f517679201 100644 (file)
@@ -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);
                }
        }