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 {
}
}
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 ($$$) {
$lx = $lm;
}
# Use last_commit from msgmap if it is older or unset
- if (!$lm || ($lx && $lx && is_ancestor($self->{git}, $lm, $lx))) {
+ if (!$lm || ($lx && $lm && is_ancestor($self->{git}, $lm, $lx))) {
$lx = $lm;
}
$lx;
delete $self->{txn} or return;
$self->{-inbox}->with_umask(sub {
if (my $xdb = $self->{xdb}) {
+
+ # store 'indexlevel=medium' in v2 part=0 and v1 (only part)
+ # This metadata is read by Admin::detect_indexlevel:
+ if (!$self->{partition} # undef or 0, not >0
+ && $self->{indexlevel} eq 'medium') {
+ $xdb->set_metadata('indexlevel', 'medium');
+ }
+
$xdb->commit_transaction;
}
$self->{over}->commit_lazy if $self->{over};