]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Search.pm
www: avoid incorrect instructions for extindex
[public-inbox.git] / lib / PublicInbox / Search.pm
index fbcff2c38fff410ab81f399901e14af3b55841c4..e80a5944371ed418d105b9c373b00a1f2282440b 100644 (file)
@@ -9,6 +9,7 @@ use parent qw(Exporter);
 our @EXPORT_OK = qw(retry_reopen int_val get_pct xap_terms);
 use List::Util qw(max);
 use POSIX qw(strftime);
+use Carp ();
 
 # values for searching, changing the numeric value breaks
 # compatibility with old indices (so don't change them it)
@@ -186,7 +187,7 @@ sub xdir ($;$) {
        my ($self, $rdonly) = @_;
        if ($rdonly || !defined($self->{shard})) {
                $self->{xpfx};
-       } else { # v2 only:
+       } else { # v2 + extindex only:
                "$self->{xpfx}/$self->{shard}";
        }
 }
@@ -405,16 +406,16 @@ sub retry_reopen {
                # Exception: The revision being read has been discarded -
                # you should call Xapian::Database::reopen()
                if (ref($@) =~ /\bDatabaseModifiedError\b/) {
-                       warn "reopen try #$i on $@\n";
+                       warn "reopen try #$i on $@\n";
                        reopen($self);
                } else {
                        # let caller decide how to spew, because ExtMsg queries
                        # get wonky and trigger:
                        # "something terrible happened at .../Xapian/Enquire.pm"
-                       die;
+                       Carp::croak($@);
                }
        }
-       die "Too many Xapian database modifications in progress\n";
+       Carp::croak("Too many Xapian database modifications in progress\n");
 }
 
 sub _do_enquire {
@@ -556,19 +557,15 @@ sub get_pct ($) { # mset item
 sub xap_terms ($$;@) {
        my ($pfx, $xdb_or_doc, @docid) = @_; # @docid may be empty ()
        my %ret;
-       eval {
-               my $end = $xdb_or_doc->termlist_end(@docid);
-               my $cur = $xdb_or_doc->termlist_begin(@docid);
-               for (; $cur != $end; $cur++) {
-                       $cur->skip_to($pfx);
-                       last if $cur == $end;
-                       my $tn = $cur->get_termname;
-                       if (index($tn, $pfx) == 0) {
-                               $ret{substr($tn, length($pfx))} = undef;
-                       }
-               }
-       };
-       \%ret;
+       my $end = $xdb_or_doc->termlist_end(@docid);
+       my $cur = $xdb_or_doc->termlist_begin(@docid);
+       for (; $cur != $end; $cur++) {
+               $cur->skip_to($pfx);
+               last if $cur == $end;
+               my $tn = $cur->get_termname;
+               $ret{substr($tn, length($pfx))} = undef if !index($tn, $pfx);
+       }
+       wantarray ? sort(keys(%ret)) : \%ret;
 }
 
 1;