diff options
author | Eric Wong (Contractor, The Linux Foundation) <e@80x24.org> | 2019-06-09 02:51:44 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2019-06-09 04:33:16 +0000 |
commit | 455a1c0ef0519b2048c34d2fb31c9e9adbe3f507 (patch) | |
tree | 9c2b76c369bd07f3bf9c431dac00aa07039fb6c2 /lib/PublicInbox/AdminEdit.pm | |
parent | ce1391fcd1ad6027bbd8413f6c5277b5cc0445d3 (diff) | |
download | public-inbox-455a1c0ef0519b2048c34d2fb31c9e9adbe3f507.tar.gz |
We'll be reusing the same logic for -edit
Diffstat (limited to 'lib/PublicInbox/AdminEdit.pm')
-rw-r--r-- | lib/PublicInbox/AdminEdit.pm | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/PublicInbox/AdminEdit.pm b/lib/PublicInbox/AdminEdit.pm index 109a99fc..b27c831b 100644 --- a/lib/PublicInbox/AdminEdit.pm +++ b/lib/PublicInbox/AdminEdit.pm @@ -8,4 +8,43 @@ use warnings; use PublicInbox::Admin; our @OPT = qw(all force|f verbose|v!); +sub check_editable ($) { + my ($ibxs) = @_; + + foreach my $ibx (@$ibxs) { + 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!/[0-9]+\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'; + } + } +} + 1; |