/$INBOX/?r=$GIT_COMMIT -> HTML only
/$INBOX/new.atom -> Atom feed
-#### Optional, relies on Search::Xapian (or Xapian SWIG binding)
+#### Optional, relies on Xapian
/$INBOX/$MESSAGE_ID/t/ -> HTML content of thread (nested)
/$INBOX/$MESSAGE_ID/T/ -> HTML content of thread (flat)
anchors:
NNTP functionality along with thread-awareness in the WWW
interface.
-C<medium> requires L<Search::Xapian(3pm)> to provide full-text
-term search functionality in the WWW UI.
+C<medium> requires L<Xapian(3pm)> or L<Search::Xapian(3pm)> to provide
+full-text term search functionality in the WWW UI.
C<full> also includes positional information used by Xapian to
allow for searching for phrases using quoted text.
public-inbox-extindex creates and updates an external search and
overview database used by the read-only public-inbox PSGI (HTTP),
NNTP, and IMAP interfaces. This requires either the
-L<Search::Xapian> XS bindings OR the L<Xapian> SWIG bindings,
+L<Xapian> SWIG bindings OR or L<Search::Xapian> XS bindings
along with L<DBD::SQLite> and L<DBI> Perl modules.
=head1 OPTIONS
public-inbox-index creates and updates the search, overview and
NNTP article number database used by the read-only public-inbox
HTTP and NNTP interfaces. Currently, this requires
-L<DBD::SQLite> and L<DBI> Perl modules. L<Search::Xapian>
-is optional, only to support the PSGI search interface.
+L<DBD::SQLite> and L<DBI> Perl modules. L<Xapian> (or L<Search::Xapian>)
+are optional, only to support the PSGI search interface.
Once the initial indices are created by public-inbox-index,
L<public-inbox-mda(1)> and L<public-inbox-watch(1)> will
# Optional but strongly recommended for hosting HTTP
# (and required for NNTP)
- # enable overview (requires DBD::SQLite) and, if Search::Xapian is
+ # enable overview (requires DBD::SQLite) and, if Xapian is
# available, search:
public-inbox-index INBOX_DIR
* PublicInbox::Search - Xapian read-only interface
Common abbreviation: $srch, $ibx->search
- Used everywhere if Search::Xapian (or Xapian.pm) is available.
+ Used everywhere if Xapian is available.
Each indexed inbox has one of these, see
public-inbox-v1-format(5) and public-inbox-v2-format(5)
rpm: perl-DBD-SQLite
(for v2, IMAP, NNTP, or gzipped mboxes)
-- Search::Xapian or Xapian(.pm) deb: libsearch-xapian-perl
- pkg: p5-Search-Xapian OR p5-Xapian (FreeBSD)
+- Xapian(.pm) (or Search::Xapian) deb: libsearch-xapian-perl
+ pkg: p5-Xapian (FreeBSD, NetBSD)
xapian-bindings-perl (OpenBSD)
rpm: perl-Search-Xapian
(HTTP and IMAP search)
Plack
Plack::Test
Plack::Middleware::ReverseProxy
- Search::Xapian
+ Xapian
Socket6
highlight.pm
xapian-tools
deb => 'libplack-perl',
pkg => 'p5-Plack',
},
- 'Search::Xapian' => {
+ 'Xapian' => {
+ deb => 'libsearch-xapian-perl',
pkg => [qw(xapian-core p5-Xapian)],
pkg_add => [qw(xapian-core xapian-bindings-perl)],
pkgin => [qw(xapian p5-Xapian)],
# these package group names and '-' syntax are passed to ci/deps.perl
my $TASKS = do {
if ($ID =~ /\A(?:free|net|open)bsd\z/) { <<EOM
-all devtest Search::Xapian-
+all devtest Xapian-
all devtest IO::KQueue-
all devtest IO::KQueue
all devtest Inline::C-
EOM
} elsif ($ID eq 'debian') { <<EOM
all devtest
-all devtest Search::Xapian-
+all devtest Xapian-
all devtest-
v2essential
essential
} elsif ($ID eq 'centos') { <<EOM
v2essential devtest
essential devtest
-all Search::Xapian-
+all Xapian-
EOM
} else { die "TODO: support ID=$ID VERSION_ID=$VERSION_ID" }
};
my %mod_groups = (
-index => [ @base_mod, @over_mod ],
-base => \@base_mod,
- -search => [ @base_mod, @over_mod, 'Search::Xapian' ],
+ -search => [ @base_mod, @over_mod, 'Xapian' ],
);
sub scan_ibx_modules ($$) {
my ($mods, $ibx) = @_;
if (!$ibx->{indexlevel} || $ibx->{indexlevel} ne 'basic') {
- $mods->{'Search::Xapian'} = 1;
+ $mods->{'Xapian'} = 1;
} else {
$mods->{$_} = 1 foreach @over_mod;
}
while (my $mod = shift @mods) {
if (my $groups = $mod_groups{$mod}) {
push @mods, @$groups;
- } elsif ($mod eq 'Search::Xapian') {
+ } elsif ($mod eq 'Xapian') {
require PublicInbox::Search;
PublicInbox::Search::load_xapian() or
- $err->{'Search::Xapian || Xapian'} = $@;
+ $err->{'Xapian || Search::Xapian'} = $@;
} else {
eval "require $mod";
$err->{$mod} = $@ if $@;
}
# Undefined indexlevel, so `full'...
- # Search::Xapian exists and the DB can be read, at least, fine
+ # Xapian exists and the DB can be read, at least, fine
$ibx->search and next;
# it's possible for a Xapian directory to exist,
- # but Search::Xapian to go missing/broken.
+ # but Xapian to go missing/broken.
# Make sure it's purged in that case:
$ibx->over or die "no over.sqlite3 in $ibx->{inboxdir}\n";
use v5.10.1;
use PublicInbox::View;
use PublicInbox::WwwAtomStream;
-use PublicInbox::Smsg; # this loads w/o Search::Xapian
+use PublicInbox::Smsg; # this loads w/o Xapian
sub generate_i {
my ($ctx) = @_;
use PublicInbox::Over;
our $QP_FLAGS;
our %X = map { $_ => 0 } qw(BoolWeight Database Enquire QueryParser Stem Query);
-our $Xap; # 'Search::Xapian' or 'Xapian'
+our $Xap; # 'Xapian' or 'Search::Xapian'
our $NVRP; # '$Xap::'.('NumberValueRangeProcessor' or 'NumberRangeProcessor')
# ENQ_DESCENDING and ENQ_ASCENDING weren't in SWIG Xapian.pm prior to 1.4.16,
sub load_xapian () {
return 1 if defined $Xap;
- # n.b. PI_XAPIAN is intended for development use only. We still
- # favor Search::Xapian since that's what's available in current
- # Debian stable (10.x) and derived distros.
- for my $x (($ENV{PI_XAPIAN} // 'Search::Xapian'), 'Xapian') {
+ # n.b. PI_XAPIAN is intended for development use only
+ for my $x (($ENV{PI_XAPIAN} // 'Xapian'), 'Search::Xapian') {
eval "require $x";
next if $@;
# NumberRangeProcessor was added in Xapian 1.3.6,
# NumberValueRangeProcessor was removed for 1.5.0+,
- # favor the older /Value/ variant since that's what our
- # (currently) preferred Search::Xapian supports
+ # continue with the older /Value/ variant for now...
$NVRP = $x.'::'.($x eq 'Xapian' && $xver ge v1.5 ?
'NumberRangeProcessor' : 'NumberValueRangeProcessor');
$X{$_} = $Xap.'::'.$_ for (keys %X);
while (my $mod = shift(@mods)) {
if ($mod eq 'lei') {
require_git(2.6, $maybe ? $maybe : ());
- push @mods, qw(DBD::SQLite Search::Xapian +SCM_RIGHTS);
+ push @mods, qw(DBD::SQLite Xapian +SCM_RIGHTS);
$mod = 'json'; # fall-through
}
if ($mod eq 'json') {
push @mods, qw(DBD::SQLite);
next;
}
- if ($mod eq 'Search::Xapian') {
+ if ($mod eq 'Xapian') {
if (eval { require PublicInbox::Search } &&
PublicInbox::Search::load_xapian()) {
next;
PublicInbox::Admin::do_chdir(delete $opt->{C});
my $cfg = PublicInbox::Config->new;
my $cidx_dir = $opt->{d};
-PublicInbox::Admin::require_or_die('Search::Xapian');
+PublicInbox::Admin::require_or_die('Xapian');
PublicInbox::Admin::progress_prepare($opt);
my $env = PublicInbox::Admin::index_prepare($opt, $cfg);
%ENV = (%ENV, %$env) if $env;
@$update_extindex:\n@eidx_unconfigured
EOF
-# "Search::Xapian" includes SWIG "Xapian", too:
-$opt->{compact} = 0 if !$mods->{'Search::Xapian'};
+$opt->{compact} = 0 if !$mods->{'Xapian'}; # (or old Search::Xapian)
PublicInbox::Admin::require_or_die(keys %$mods);
my $env = PublicInbox::Admin::index_prepare($opt, $cfg);
use v5.10.1;
use PublicInbox::TestCommon;
use PublicInbox::Eml;
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
use_ok 'PublicInbox::Msgmap';
use_ok 'PublicInbox::SearchIdx';
my ($tmpdir, $for_destroy) = tmpdir();
use PublicInbox::TestCommon;
use PublicInbox::Eml;
require_git(2.6);
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
require PublicInbox::Msgmap;
my $another = 'another-nntp.sqlite3';
my $altid = [ "serial:gmane:file=$another" ];
use PublicInbox::TestCommon;
use Cwd qw(getcwd abs_path);
use List::Util qw(sum);
-require_mods(qw(json Search::Xapian));
+require_mods(qw(json Xapian));
use_ok 'PublicInbox::CodeSearchIdx';
require PublicInbox::Import;
my ($tmp, $for_destroy) = tmpdir();
use PublicInbox::TestCommon;
use PublicInbox::Import;
require_git(2.6);
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
have_xapian_compact;
my ($tmpdir, $for_destroy) = tmpdir();
my $ibx = create_inbox 'v1', indexlevel => 'medium', tmpdir => "$tmpdir/v1",
use File::Copy qw(cp);
use IO::Handle ();
require_git(2.6);
-require_mods(qw(json DBD::SQLite Search::Xapian
+require_mods(qw(json DBD::SQLite Xapian
HTTP::Request::Common Plack::Test URI::Escape Plack::Builder));
use_ok($_) for (qw(HTTP::Request::Common Plack::Test));
use IO::Uncompress::Gunzip qw(gunzip);
use PublicInbox::InboxWritable;
use Fcntl qw(:seek);
require_git(2.6);
-require_mods(qw(json DBD::SQLite Search::Xapian));
+require_mods(qw(json DBD::SQLite Xapian));
require PublicInbox::Search;
use_ok 'PublicInbox::ExtSearch';
use_ok 'PublicInbox::ExtSearchIdx';
my $level = 'basic';
SKIP: {
- require_mods('Search::Xapian', 1);
+ require_mods('Xapian', 1);
$level = 'medium';
};
use File::Path qw(remove_tree);
require PublicInbox::InboxWritable;
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
use_ok 'PublicInbox::Over';
my ($tmpdir, $for_destroy) = tmpdir();
$import_index_incremental->($PI_TEST_VERSION, 'basic', $mime);
SKIP: {
- require_mods(qw(Search::Xapian), 2);
+ require_mods(qw(Xapian), 2);
foreach my $l (qw(medium full)) {
$import_index_incremental->($PI_TEST_VERSION, $l, $mime);
}
}
SKIP: {
- require_mods(qw(DBD::SQLite Search::Xapian), 2);
+ require_mods(qw(DBD::SQLite Xapian), 2);
require_git(2.6, 2);
use_ok 'PublicInbox::Msgmap';
local $ENV{PI_DIR} = "$tmpdir/.public-inbox/";
use strict; use v5.10.1; use PublicInbox::TestCommon;
use Fcntl qw(SEEK_SET);
require_git 2.6;
-require_mods(qw(json DBD::SQLite Search::Xapian));
+require_mods(qw(json DBD::SQLite Xapian));
use POSIX qw(WTERMSIG WIFSIGNALED SIGPIPE);
my @onions = map { "http://$_.onion/meta/" } qw(
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
use strict; use v5.10.1; use PublicInbox::TestCommon;
require_git 2.6;
-require_mods(qw(lei json DBD::SQLite Search::Xapian Net::NNTP));
+require_mods(qw(lei json DBD::SQLite Xapian Net::NNTP));
my ($ro_home, $cfg_path) = setup_public_inboxes;
my ($tmpdir, $for_destroy) = tmpdir;
my $sock = tcp_server;
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
use strict; use v5.10.1; use PublicInbox::TestCommon;
require_git 2.6;
-require_mods(qw(json DBD::SQLite Search::Xapian));
+require_mods(qw(json DBD::SQLite Xapian));
test_lei(sub {
ok(!lei(qw(p2q this-better-cause-format-patch-to-fail)),
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
use strict; use v5.10.1; use PublicInbox::TestCommon;
require_git 2.6;
-require_mods(qw(json DBD::SQLite Search::Xapian));
+require_mods(qw(json DBD::SQLite Xapian));
use PublicInbox::LeiToMail;
my ($ro_home, $cfg_path) = setup_public_inboxes;
test_lei(sub {
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
use strict; use v5.10.1; use PublicInbox::TestCommon;
require_git 2.6;
-require_mods(qw(json DBD::SQLite Search::Xapian));
+require_mods(qw(json DBD::SQLite Xapian));
my ($ro_home, $cfg_path) = setup_public_inboxes;
my $check_kw = sub {
my ($exp, %opt) = @_;
use Test::More;
use PublicInbox::TestCommon;
use POSIX qw(_exit);
-require_mods(qw(Search::Xapian DBD::SQLite));
+require_mods(qw(Xapian DBD::SQLite));
require_ok 'PublicInbox::LeiOverview';
my $ovv = bless {}, 'PublicInbox::LeiOverview';
use v5.10.1;
use Test::More;
use PublicInbox::TestCommon;
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
require_git 2.6;
require_ok 'PublicInbox::LeiStore';
require_ok 'PublicInbox::ExtSearch';
use List::Util qw(shuffle);
use PublicInbox::TestCommon;
use PublicInbox::Eml;
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
require PublicInbox::ExtSearchIdx;
require_git 2.6;
require_ok 'PublicInbox::LeiXSearch';
use PublicInbox::Config;
use PublicInbox::TestCommon;
require_git(2.6);
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
use_ok 'PublicInbox::V2Writable';
my ($tmpdir, $for_destroy) = tmpdir();
my $pi_config = "$tmpdir/pi_config";
use v5.10.1;
use Test::More;
use PublicInbox::TestCommon;
-require_mods(qw(Search::Xapian DBD::SQLite));
+require_mods(qw(Xapian DBD::SQLite));
use_ok 'PublicInbox::MiscSearch';
use_ok 'PublicInbox::MiscIdx';
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
use strict; use v5.10.1; use PublicInbox::TestCommon;
require_git 2.6;
-require_mods(qw(-imapd Search::Xapian Mail::IMAPClient));
+require_mods(qw(-imapd Xapian Mail::IMAPClient));
use PublicInbox::Config;
my ($tmpdir, $for_destroy) = tmpdir;
my ($ro_home, $cfg_path) = setup_public_inboxes;
}
my $noerr = { 2 => \(my $null) };
SKIP: {
- if ($INC{'Search/Xapian.pm'} && ($ENV{TEST_RUN_MODE}//2)) {
- skip 'Search/Xapian.pm pre-loaded (by t/run.perl?)', 1;
+ if ($INC{'Search/Xapian.pm'} || $INC{'Xapian.pm'} &&
+ ($ENV{TEST_RUN_MODE} // 2)) {
+ skip 'Xapian.pm pre-loaded (by t/run.perl?)', 1;
}
$lsof or skip 'lsof missing', 1;
my @of = xqx([$lsof, '-p', $td->{pid}], undef, $noerr);
skip('lsof broken', 1) if (!scalar(@of) || $?);
- my @xap = grep m!Search/Xapian!, @of;
- is_deeply(\@xap, [], 'Xapian not loaded in nntpd');
+ my @xap = grep m!\bXapian\b!, @of;
+ is_deeply(\@xap, [], 'Xapian not loaded in nntpd') or
+ diag explain(\@of);
}
# -compact requires Xapian
SKIP: {
- require_mods('Search::Xapian', 2);
+ require_mods('Xapian', 2);
have_xapian_compact or skip 'xapian-compact missing', 2;
is(xsys(qw(git config), "--file=$home/.public-inbox/config",
"publicinbox.$group.indexlevel", 'medium'),
});
SKIP: {
- require_mods(qw(DBD::SQLite Search::Xapian IO::Uncompress::Gunzip), 3);
+ require_mods(qw(DBD::SQLite Xapian IO::Uncompress::Gunzip), 3);
require_ok 'PublicInbox::SearchIdx';
PublicInbox::SearchIdx->new($ibx, 1)->index_sync;
test_psgi($app, sub {
use PublicInbox::Eml;
use PublicInbox::Config;
require_git 2.6;
-my @mods = qw(DBD::SQLite Search::Xapian HTTP::Request::Common
+my @mods = qw(DBD::SQLite Xapian HTTP::Request::Common
Plack::Test URI::Escape Plack::Builder Plack::Test);
require_mods(@mods);
use_ok($_) for (qw(HTTP::Request::Common Plack::Test));
use PublicInbox::Eml;
use PublicInbox::Config;
use PublicInbox::Inbox;
-my @mods = qw(DBD::SQLite Search::Xapian HTTP::Request::Common Plack::Test
+my @mods = qw(DBD::SQLite Xapian HTTP::Request::Common Plack::Test
URI::Escape Plack::Builder);
require_mods(@mods);
use_ok($_) for (qw(HTTP::Request::Common Plack::Test));
use PublicInbox::Eml;
use PublicInbox::Config;
use PublicInbox::MID qw(mids);
-require_mods(qw(DBD::SQLite Search::Xapian HTTP::Request::Common Plack::Test
+require_mods(qw(DBD::SQLite Xapian HTTP::Request::Common Plack::Test
URI::Escape Plack::Builder HTTP::Date));
use_ok($_) for (qw(HTTP::Request::Common Plack::Test));
use_ok 'PublicInbox::WWW';
test_replace(2, 'basic', $opt = { %$opt, rotate_bytes => 1 });
SKIP: {
- require_mods(qw(Search::Xapian), 8);
+ require_mods(qw(Xapian), 8);
for my $l (qw(medium)) {
test_replace(2, $l, {});
$opt = { pre => \&pad_msgs };
use PublicInbox::TestCommon;
use PublicInbox::MID qw(mids);
use PublicInbox::Eml;
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
require PublicInbox::SearchIdx;
require PublicInbox::Smsg;
require PublicInbox::Inbox;
use strict;
use v5.10;
use PublicInbox::TestCommon;
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
require PublicInbox::SearchIdx;
require PublicInbox::Inbox;
require PublicInbox::InboxWritable;
require_git v2.6;
use PublicInbox::ContentHash qw(git_sha);
use PublicInbox::Spawn qw(popen_rd);
-require_mods(qw(DBD::SQLite Search::Xapian URI::Escape));
+require_mods(qw(DBD::SQLite Xapian URI::Escape));
require PublicInbox::SolverGit;
my $rdr = { 2 => \(my $null) };
my $git_dir = xqx([qw(git rev-parse --git-common-dir)], undef, $rdr);
use PublicInbox::Import;
use PublicInbox::TestCommon;
use PublicInbox::Eml;
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
require PublicInbox::SearchIdx;
my ($inboxdir, $for_destroy) = tmpdir();
my $ibx = {
use PublicInbox::TestCommon;
use PublicInbox::Eml;
require_git(2.6);
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
use_ok 'PublicInbox::SearchIdx';
use_ok 'PublicInbox::Import';
use_ok 'PublicInbox::OverIdx';
use PublicInbox::Eml;
use PublicInbox::TestCommon;
require_git(2.6);
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
use_ok 'PublicInbox::V2Writable';
my ($inboxdir, $for_destroy) = tmpdir();
my $ibx = {
require_git(2.6);
my $V = 2;
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
use_ok 'PublicInbox::V2Writable';
my ($tmpdir, $for_destroy) = tmpdir();
my $ibx = {
# Integration tests for HTTP cloning + mirroring
require_mods(qw(Plack::Util Plack::Builder
- HTTP::Date HTTP::Status Search::Xapian DBD::SQLite));
+ HTTP::Date HTTP::Status Xapian DBD::SQLite));
use_ok 'PublicInbox::V2Writable';
use PublicInbox::InboxWritable;
use PublicInbox::Eml;
use PublicInbox::ContentHash qw(content_digest);
use File::Path qw(remove_tree);
require_git(2.6);
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
use_ok 'PublicInbox::V2Writable';
use_ok 'PublicInbox::OverIdx';
my ($inboxdir, $for_destroy) = tmpdir();
use PublicInbox::TestCommon;
use Cwd qw(abs_path);
require_git(2.6);
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
local $ENV{HOME} = abs_path('t');
use_ok 'PublicInbox::V2Writable';
umask 007;
use Test::More;
use PublicInbox::Eml;
use PublicInbox::Config;
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
use_ok 'PublicInbox::Watch';
use_ok 'PublicInbox::Emergency';
my ($tmpdir, $for_destroy) = tmpdir();
use PublicInbox::TestCommon;
use PublicInbox::Import;
require_git(2.6);
-require_mods(qw(Search::Xapian DBD::SQLite));
+require_mods(qw(Xapian DBD::SQLite));
require PublicInbox::V2Writable;
my ($tmpdir, $for_destroy) = tmpdir();
my $inboxdir = "$tmpdir/v2";
use PublicInbox::Config;
use PublicInbox::TestCommon;
require_git(2.6);
-require_mods(qw(Search::Xapian DBD::SQLite));
+require_mods(qw(Xapian DBD::SQLite));
my ($tmpdir, $for_destroy) = tmpdir();
my $inboxdir = "$tmpdir/v2";
my $maildir = "$tmpdir/md";
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
use v5.12;
use PublicInbox::TestCommon;
-require_mods(qw(DBD::SQLite Search::Xapian +SCM_RIGHTS)); # TODO: FIFO support?
+require_mods(qw(DBD::SQLite Xapian +SCM_RIGHTS)); # TODO: FIFO support?
use PublicInbox::Spawn qw(spawn);
use Socket qw(AF_UNIX SOCK_SEQPACKET SOCK_STREAM);
require PublicInbox::AutoReap;
use strict;
use v5.10.1;
use PublicInbox::TestCommon;
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
require_git('2.6');
use PublicInbox::Eml;
require PublicInbox::Search;
$many_root = abs_path($many_root);
$many_root =~ m!\A\Q$cwd\E/! and BAIL_OUT "$many_root must not be in $cwd";
require_git 2.6;
-require_mods(qw(DBD::SQLite Search::Xapian));
+require_mods(qw(DBD::SQLite Xapian));
use_ok 'PublicInbox::V2Writable';
my $nr_inbox = $ENV{NR_INBOX} // 10;
my $nproc = $ENV{NPROC} || PublicInbox::IPC::detect_nproc() || 2;
use PublicInbox::TestCommon;
use PublicInbox::Config; # this relies on PI_CONFIG // ~/.public-inbox/config
my @psgi = qw(HTTP::Request::Common Plack::Test URI::Escape Plack::Builder);
-require_mods(qw(DBD::SQLite Search::Xapian), @psgi);
+require_mods(qw(DBD::SQLite Xapian), @psgi);
use_ok($_) for @psgi;
use_ok 'PublicInbox::WWW';
my $cfg = PublicInbox::Config->new;