]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/MiscIdx.pm
nntp: speed up mid_lookup() using ->ALL extindex
[public-inbox.git] / lib / PublicInbox / MiscIdx.pm
index edc70f9b37c358e7b556d3c92a1133971538ee25..642d920baf608104bbcce29c527970b3718a89db 100644 (file)
@@ -20,6 +20,7 @@ use PublicInbox::Spawn qw(nodatacow_dir);
 use Carp qw(croak);
 use File::Path ();
 use PublicInbox::MiscSearch;
+use PublicInbox::Config;
 
 sub new {
        my ($class, $eidx) = @_;
@@ -97,6 +98,23 @@ EOF
                }
        }
        index_text($self, $ibx->{name}, 1, 'XNAME');
+       my $data = {};
+       if (defined(my $max = $ibx->max_git_epoch)) { # v2
+               my $desc = $ibx->description;
+               my $pfx = "/$ibx->{name}/git/";
+               for my $epoch (0..$max) {
+                       my $git = $ibx->git_epoch($epoch) or return;
+                       if (my $ent = $git->manifest_entry($epoch, $desc)) {
+                               $data->{"$pfx$epoch.git"} = $ent;
+                               $ent->{git_dir} = $git->{git_dir};
+                       }
+                       $git->cleanup; # ->modified starts cat-file --batch
+               }
+       } elsif (my $ent = $ibx->git->manifest_entry) { # v1
+               $ent->{git_dir} = $ibx->{inboxdir};
+               $data->{"/$ibx->{name}"} = $ent;
+       }
+       $doc->set_data(PublicInbox::Config::json()->encode($data));
        if (defined $docid) {
                $xdb->replace_document($docid, $doc);
        } else {