about summary refs log tree commit homepage
path: root/lib/PublicInbox/Admin.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-05-29 20:56:32 +0000
committerEric Wong <e@80x24.org>2019-05-29 20:56:59 +0000
commit3c9ab47c7d0e26fd22e1f42a198696b093629802 (patch)
treeaa6df6d879d82ced06add1d4869c81336d2664e5 /lib/PublicInbox/Admin.pm
parent4f814ff418e334a9b7b9bd96cd5450c2823de2f6 (diff)
downloadpublic-inbox-3c9ab47c7d0e26fd22e1f42a198696b093629802.tar.gz
And use it from Admin.

It's easy to tell what indexlevel=basic is from unconfigured
inboxes, but distinguishing between 'medium' and 'full' would
require stat()-ing position.* files which is fragile and
Xapian-implementation-dependent.

So use the metadata facility of Xapian and store it in the main
partition so Admin tools can deal better with unconfigured
inboxes copied using generic tools like cp(1) or rsync(1).
Diffstat (limited to 'lib/PublicInbox/Admin.pm')
-rw-r--r--lib/PublicInbox/Admin.pm25
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/PublicInbox/Admin.pm b/lib/PublicInbox/Admin.pm
index 07d8b572..4a862c6d 100644
--- a/lib/PublicInbox/Admin.pm
+++ b/lib/PublicInbox/Admin.pm
@@ -41,6 +41,31 @@ sub resolve_repo_dir {
         }
 }
 
+# for unconfigured inboxes
+sub detect_indexlevel ($) {
+        my ($ibx) = @_;
+
+        # brand new or never before indexed inboxes default to full
+        return 'full' unless $ibx->over;
+        delete $ibx->{over}; # don't leave open FD lying around
+
+        my $l = 'basic';
+        my $srch = $ibx->search or return $l;
+        delete $ibx->{search}; # don't leave open FD lying around
+        if (my $xdb = $srch->xdb) {
+                $l = 'full';
+                my $m = $xdb->get_metadata('indexlevel');
+                if ($m eq 'medium') {
+                        $l = $m;
+                } elsif ($m ne '') {
+                        warn <<"";
+$ibx->{mainrepo} has unexpected indexlevel in Xapian: $m
+
+                }
+        }
+        $l;
+}
+
 sub resolve_inboxes {
         my ($argv, $warn_on_unconfigured) = @_;
         require PublicInbox::Config;