From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00, URIBL_BLOCKED shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id D743D1F87F for ; Thu, 30 May 2019 06:52:27 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 2/4] v2writable: hoist out index_epoch sub Date: Thu, 30 May 2019 06:52:25 +0000 Message-Id: <20190530065227.17641-3-e@80x24.org> In-Reply-To: <20190530065227.17641-1-e@80x24.org> References: <20190530065227.17641-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: This will make future changes easier-to-follow. --- lib/PublicInbox/V2Writable.pm | 65 ++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm index df8cfb4..375f12f 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 -- EW