]> Sergey Matveev's repositories - public-inbox.git/commitdiff
extmsg: don't bother partial matching with <16 chars
authorEric Wong <e@80x24.org>
Sun, 20 Jan 2019 12:33:20 +0000 (12:33 +0000)
committerEric Wong <e@80x24.org>
Sun, 20 Jan 2019 12:37:08 +0000 (12:37 +0000)
It's not worth it, and attempts to wildcard off
single-character Message-IDs(*) causes Xapian to error
out in unpredictable ways:

  something terrible happened at /usr/lib/x86_64-linux-gnu/perl5/5.24/Search/Xapian/Enquire.pm line 54.
    ...propagated at lib/PublicInbox/Search.pm line 209.

So don't bother.

(*) because people blindly hit 'y' or 'n' when git-send-email
    prompted them for In-Reply-To.

lib/PublicInbox/ExtMsg.pm

index 51e7799de8640929be9538713d3f2ee7e1b1081d..14d49cc59e186c8102fe60eda13513c767a2fa94 100644 (file)
@@ -11,6 +11,7 @@ use warnings;
 use PublicInbox::Hval;
 use PublicInbox::MID qw/mid2path/;
 use PublicInbox::WwwStream;
+our $MIN_PARTIAL_LEN = 16;
 
 # TODO: user-configurable
 our @EXT_URL = (
@@ -30,6 +31,7 @@ sub PARTIAL_MAX () { 100 }
 
 sub search_partial ($$) {
        my ($srch, $mid) = @_;
+       return if length($mid) < $MIN_PARTIAL_LEN;
        my $opt = { limit => PARTIAL_MAX, mset => 2 };
        my @try = ("m:$mid*");
        my $chop = $mid;
@@ -58,12 +60,12 @@ sub search_partial ($$) {
        }
 
        foreach my $m (@try) {
-               my $mset = eval { $srch->query($m, $opt) };
-               if (ref($@) eq 'Search::Xapian::QueryParserError') {
-                       # If Xapian can't handle the wildcard since it
-                       # has too many results.
-                       next;
-               }
+               # If Xapian can't handle the wildcard since it
+               # has too many results.  $@ can be
+               # Search::Xapian::QueryParserError or even:
+               # "something terrible happened at ../Search/Xapian/Enquire.pm"
+               my $mset = eval { $srch->query($m, $opt) } or next;
+
                my @mids = map {
                        my $doc = $_->get_document;
                        PublicInbox::SearchMsg->load_doc($doc)->mid;
@@ -112,7 +114,7 @@ sub ext_msg {
        }
 
        # can't find a partial match in current inbox, try the others:
-       if (!$n_partial && length($mid) >= 16) {
+       if (!$n_partial && length($mid) >= $MIN_PARTIAL_LEN) {
                foreach my $ibx (@ibx) {
                        $srch = $ibx->search or next;
                        $mids = search_partial($srch, $mid) or next;