about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-07-24 05:55:50 +0000
committerEric Wong <e@yhbt.net>2020-07-25 20:48:18 +0000
commitfafd40fbe5ed0b022a2712cc1509e9600eb7333d (patch)
tree3efdbfb3650dc05b20b274d98fba34d6d12686b1
parentc386663dd9ffec6ebbe64e7bb5096ee3df7d273d (diff)
downloadpublic-inbox-fafd40fbe5ed0b022a2712cc1509e9600eb7333d.tar.gz
Instead of doing fill_alternates for every epoch we're indexing,
just do it once at the start of index_sync invocation.  This
will set us up for using a single "git cat-file" process for
indexing multiple epochs.
-rw-r--r--lib/PublicInbox/V2Writable.pm11
1 files changed, 5 insertions, 6 deletions
diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm
index 04c91e5d..c896dc0e 100644
--- a/lib/PublicInbox/V2Writable.pm
+++ b/lib/PublicInbox/V2Writable.pm
@@ -682,10 +682,7 @@ sub fill_alternates ($$) {
 
         my $pfx = "$self->{-inbox}->{inboxdir}/git";
         my $all = "$self->{-inbox}->{inboxdir}/all.git";
-
-        unless (-d $all) {
-                PublicInbox::Import::init_bare($all);
-        }
+        PublicInbox::Import::init_bare($all) unless -d $all;
         my $info_dir = "$all/objects/info";
         my $alt = "$info_dir/alternates";
         my (%alt, $new);
@@ -695,7 +692,9 @@ sub fill_alternates ($$) {
                 $mode = (stat($fh))[2] & 07777;
 
                 # we assign a sort score to every alternate and favor
-                # the newest (highest numbered) one when we
+                # the newest (highest numbered) one because loose objects
+                # require scanning epochs and only the latest epoch is
+                # expected to see loose objects
                 my $score;
                 my $other = 0; # in case admin adds non-epoch repos
                 %alt = map {;
@@ -1213,7 +1212,6 @@ sub index_epoch ($$$) {
         my $git_dir = git_dir_n($self, $i);
         die 'BUG: already reindexing!' if $self->{reindex_pipe};
         -d $git_dir or return; # missing epochs are fine
-        fill_alternates($self, $i);
         my $git = PublicInbox::Git->new($git_dir);
         if (my $unindex_range = delete $sync->{unindex_range}->{$i}) {
                 unindex($self, $sync, $git, $unindex_range);
@@ -1247,6 +1245,7 @@ sub index_sync {
         my $latest = git_dir_latest($self, \$epoch_max);
         return unless defined $latest;
         $self->idx_init($opt); # acquire lock
+        fill_alternates($self, $epoch_max);
         $self->{over}->rethread_prepare($opt);
         my $sync = {
                 unindex_range => {}, # EPOCH => oid_old..oid_new