about summary refs log tree commit homepage
path: root/lib/PublicInbox/V2Writable.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-05-30 03:59:39 +0000
committerEric Wong <e@80x24.org>2019-05-30 05:53:54 +0000
commiteb5291e92aa8d9d051948c09e949f705b3178e95 (patch)
tree2da3a1d006ff41006dfffad79b2ad61f0367c2a7 /lib/PublicInbox/V2Writable.pm
parent13ed8aebfc43bd99571d589743333f36bff5567f (diff)
downloadpublic-inbox-eb5291e92aa8d9d051948c09e949f705b3178e95.tar.gz
This will make future changes easier-to-follow.
Diffstat (limited to 'lib/PublicInbox/V2Writable.pm')
-rw-r--r--lib/PublicInbox/V2Writable.pm65
1 files changed, 37 insertions, 28 deletions
diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm
index df8cfb45..375f12fa 100644
--- a/lib/PublicInbox/V2Writable.pm
+++ b/lib/PublicInbox/V2Writable.pm
@@ -981,6 +981,42 @@ sub sync_ranges ($$$) {
         $ranges;
 }
 
+sub index_epoch ($$$) {
+        my ($self, $sync, $i) = @_;
+
+        my $git_dir = git_dir_n($self, $i);
+        die 'BUG: already reindexing!' if $self->{reindex_pipe};
+        -d $git_dir or return; # missing parts 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);
+        }
+        defined(my $range = $sync->{ranges}->[$i]) or return;
+        if (my $pr = $sync->{-opt}->{-progress}) {
+                $pr->("$i.git indexing $range\n");
+        }
+
+        my @cmd = qw(log --raw -r --pretty=tformat:%H
+                        --no-notes --no-color --no-abbrev --no-renames);
+        my $fh = $self->{reindex_pipe} = $git->popen(@cmd, $range);
+        my $cmt;
+        while (<$fh>) {
+                chomp;
+                $self->{current_info} = "$i.git $_";
+                if (/\A$x40$/o && !defined($cmt)) {
+                        $cmt = $_;
+                } elsif (/\A:\d{6} 100644 $x40 ($x40) [AM]\tm$/o) {
+                        reindex_oid($self, $sync, $git, $1);
+                } elsif (/\A:\d{6} 100644 $x40 ($x40) [AM]\td$/o) {
+                        mark_deleted($self, $sync, $git, $1);
+                }
+        }
+        $fh = undef;
+        delete $self->{reindex_pipe};
+        update_last_commit($self, $git, $i, $cmt) if defined $cmt;
+}
+
 # public, called by public-inbox-index
 sub index_sync {
         my ($self, $opt) = @_;
@@ -1000,36 +1036,9 @@ sub index_sync {
         $sync->{ranges} = sync_ranges($self, $sync, $epoch_max);
         $sync->{regen} = sync_prepare($self, $sync, $epoch_max);
 
-        my @cmd = qw(log --raw -r --pretty=tformat:%H
-                        --no-notes --no-color --no-abbrev --no-renames);
-
         # work backwards through history
         for (my $i = $epoch_max; $i >= 0; $i--) {
-                my $git_dir = git_dir_n($self, $i);
-                die 'BUG: already reindexing!' if $self->{reindex_pipe};
-                -d $git_dir or next; # missing parts are fine
-                fill_alternates($self, $i);
-                my $git = PublicInbox::Git->new($git_dir);
-                my $unindex_range = delete $sync->{unindex_range}->{$i};
-                unindex($self, $sync, $git, $unindex_range) if $unindex_range;
-                defined(my $range = $sync->{ranges}->[$i]) or next;
-                $pr->("$i.git indexing $range\n") if $pr;
-                my $fh = $self->{reindex_pipe} = $git->popen(@cmd, $range);
-                my $cmt;
-                while (<$fh>) {
-                        chomp;
-                        $self->{current_info} = "$i.git $_";
-                        if (/\A$x40$/o && !defined($cmt)) {
-                                $cmt = $_;
-                        } elsif (/\A:\d{6} 100644 $x40 ($x40) [AM]\tm$/o) {
-                                reindex_oid($self, $sync, $git, $1);
-                        } elsif (/\A:\d{6} 100644 $x40 ($x40) [AM]\td$/o) {
-                                mark_deleted($self, $sync, $git, $1);
-                        }
-                }
-                $fh = undef;
-                delete $self->{reindex_pipe};
-                update_last_commit($self, $git, $i, $cmt) if defined $cmt;
+                index_epoch($self, $sync, $i);
         }
 
         # unindex is required for leftovers if "deletes" affect messages