]> Sergey Matveev's repositories - public-inbox.git/commitdiff
AdminEdit: move editability checks from -purge
authorEric Wong (Contractor, The Linux Foundation) <e@80x24.org>
Sun, 9 Jun 2019 02:51:44 +0000 (02:51 +0000)
committerEric Wong <e@80x24.org>
Sun, 9 Jun 2019 04:33:16 +0000 (04:33 +0000)
We'll be reusing the same logic for -edit

lib/PublicInbox/AdminEdit.pm
script/public-inbox-purge

index 109a99fc437f475a92ed995767f064d4a8e26839..b27c831b3ee30363795be25525dd5387d7e9fa85 100644 (file)
@@ -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;
index dc7f89d951b27f737368527dc60b1dc767c45699..846557cab47b6d1c235222fbc0bf345c93e69269 100755 (executable)
@@ -21,40 +21,7 @@ GetOptions($opt, @PublicInbox::AdminEdit::OPT) or
        die "bad command-line args\n$usage\n";
 
 my @ibxs = PublicInbox::Admin::resolve_inboxes(\@ARGV, $opt);
-
-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';
-       }
-}
+PublicInbox::AdminEdit::check_editable(\@ibxs);
 
 my $data = do { local $/; scalar <STDIN> };
 $data =~ s/\A[\r\n]*From [^\r\n]*\r?\n//s;