From 0b1de991a099b5e8b9a9e3e85b5eaaacc9362dbb Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 15 May 2019 01:18:08 +0000 Subject: lazy load Xapian and make it optional for v2 More tests work without Search::Xapian, now. Usability issues still need to be fixed --- script/public-inbox-purge | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'script/public-inbox-purge') diff --git a/script/public-inbox-purge b/script/public-inbox-purge index 688dd950..264bcdef 100755 --- a/script/public-inbox-purge +++ b/script/public-inbox-purge @@ -63,6 +63,11 @@ if ($all) { mainrepo => $dir, }); }; + + # somebody could "rm -r" all the Xapian directories; + # let them purge the overview, at least + $ibx->{indexlevel} ||= 'basic' unless $ibx->search; + push @inboxes, $ibx; } -- cgit v1.2.3-24-ge0c7 From d0e8bfd866ed1e924e8d9f551939eecbea4920ef Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 15 May 2019 01:18:09 +0000 Subject: admin: improve warnings and errors for missing modules Since we lazy-load Xapian now, some errors may become more cryptic or buried. Try to improve that by making Admin show better errors. --- script/public-inbox-purge | 53 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 12 deletions(-) (limited to 'script/public-inbox-purge') diff --git a/script/public-inbox-purge b/script/public-inbox-purge index 264bcdef..381826dc 100755 --- a/script/public-inbox-purge +++ b/script/public-inbox-purge @@ -7,16 +7,16 @@ use strict; use warnings; use Getopt::Long qw(:config gnu_getopt no_ignore_case auto_abbrev); -use PublicInbox::Config; -use PublicInbox::MIME; use PublicInbox::Admin qw(resolve_repo_dir); -use PublicInbox::Filter::Base; -*REJECT = *PublicInbox::Filter::Base::REJECT; +PublicInbox::Admin::check_require('-index'); +require PublicInbox::Filter::Base; +require PublicInbox::Config; +require PublicInbox::MIME; +require PublicInbox::V2Writable; -my $usage = "$0 [--all] [INBOX_DIRS] new }; my $cfgfile = PublicInbox::Config::default_file(); my ($all, $force); @@ -63,11 +63,6 @@ if ($all) { mainrepo => $dir, }); }; - - # somebody could "rm -r" all the Xapian directories; - # let them purge the overview, at least - $ibx->{indexlevel} ||= 'basic' unless $ibx->search; - push @inboxes, $ibx; } @@ -77,6 +72,40 @@ if ($all) { } } +foreach my $ibx (@inboxes) { + my $lvl = $ibx->{indexlevel}; + if (defined $lvl) { + PublicInbox::Admin::indexlevel_ok_or_die($lvl); + next; + } + + # Undefined indexlevel, so `full'... + # Search::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. Make sure it's purged in that case: + $ibx->over or die "no over.sqlite3 in $ibx->{mainrepo}\n"; + + # $ibx->{search} is populated by $ibx->over call + my $xdir_ro = $ibx->{search}->xdir(1); + my $npart = 0; + foreach my $part (<$xdir_ro/*>) { + if (-d $part && $part =~ m!/\d+\z!) { + my $bytes = 0; + $bytes += -s $_ foreach glob("$part/*"); + $npart++ if $bytes; + } + } + if ($npart) { + PublicInbox::Admin::require_or_die('-search'); + } else { + # somebody could "rm -r" all the Xapian directories; + # let them purge the overview, at least + $ibx->{indexlevel} ||= 'basic'; + } +} + my $data = do { local $/; scalar }; $data =~ s/\A[\r\n]*From [^\r\n]*\r?\n//s; my $n_purged = 0; -- cgit v1.2.3-24-ge0c7