diff options
Diffstat (limited to 'lib/PublicInbox/SearchIdx.pm')
-rw-r--r-- | lib/PublicInbox/SearchIdx.pm | 41 |
1 files changed, 18 insertions, 23 deletions
diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm index 99856286..a088ce75 100644 --- a/lib/PublicInbox/SearchIdx.pm +++ b/lib/PublicInbox/SearchIdx.pm @@ -30,31 +30,22 @@ my $xapianlevels = qr/\A(?:full|medium)\z/; sub new { my ($class, $ibx, $creat, $part) = @_; + ref $ibx or die "BUG: expected PublicInbox::Inbox object: $ibx"; my $levels = qr/\A(?:full|medium|basic)\z/; - my $mainrepo = $ibx; # for "public-inbox-index" w/o entry in config - my $git_dir = $mainrepo; - my ($altid, $git); - my $version = 1; + my $mainrepo = $ibx->{mainrepo}; + my $version = $ibx->{version} || 1; my $indexlevel = 'full'; - if (ref $ibx) { - $mainrepo = $ibx->{mainrepo}; - $altid = $ibx->{altid}; - $version = $ibx->{version} || 1; - if ($altid) { - require PublicInbox::AltId; - $altid = [ map { - PublicInbox::AltId->new($ibx, $_); - } @$altid ]; - } - if ($ibx->{indexlevel}) { - if ($ibx->{indexlevel} =~ $levels) { - $indexlevel = $ibx->{indexlevel}; - } else { - die("Invalid indexlevel $ibx->{indexlevel}\n"); - } + my $altid = $ibx->{altid}; + if ($altid) { + require PublicInbox::AltId; + $altid = [ map { PublicInbox::AltId->new($ibx, $_); } @$altid ]; + } + if ($ibx->{indexlevel}) { + if ($ibx->{indexlevel} =~ $levels) { + $indexlevel = $ibx->{indexlevel}; + } else { + die("Invalid indexlevel $ibx->{indexlevel}\n"); } - } else { # FIXME: old tests: old tests - $ibx = { mainrepo => $git_dir, version => 1 }; } $ibx = PublicInbox::InboxWritable->new($ibx); my $self = bless { @@ -117,7 +108,11 @@ sub _xdb_acquire { } } return unless defined $flag; - $self->{xdb} = Search::Xapian::WritableDatabase->new($dir, $flag); + my $xdb = eval { Search::Xapian::WritableDatabase->new($dir, $flag) }; + if ($@) { + die "Failed opening $dir: ", $@; + } + $self->{xdb} = $xdb; } sub add_val ($$$) { |