]> Sergey Matveev's repositories - public-inbox.git/commitdiff
SearchIdx.pm: Always assign numbers backwards during incremental indexing
authorEric W. Biederman <ebiederm@xmission.com>
Wed, 1 Aug 2018 16:43:38 +0000 (11:43 -0500)
committerEric Wong <e@80x24.org>
Thu, 2 Aug 2018 02:18:13 +0000 (02:18 +0000)
When walking messages newest to oldest, assigning the larger numbers
before smaller numbers ensures older messages get smaller numbers.
This leads to the possibility of a msgmap that can be regenerated when
needed.

Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
lib/PublicInbox/SearchIdx.pm

index 1d259a8642a38a81677b30253e469592cf5ab5e8..ac821ac00c6ab121c216856fcae12aec1e3b6586 100644 (file)
@@ -619,23 +619,28 @@ sub _git_log {
        my ($self, $range) = @_;
        my $git = $self->{git};
 
+       # Count the new files so they can be added newest to oldest
+       # and still have numbers increasing from oldest to newest
+       my $fcount = 0;
+       # can't use 'rev-list --count' if we use --diff-filter
+       my $fh = $git->popen(qw(log --pretty=tformat:%h
+                            --no-notes --no-color --no-renames
+                            --diff-filter=AM), $range);
+       ++$fcount while <$fh>;
+       my (undef, $max) = $self->{mm}->minmax;
+
        if (index($range, '..') < 0) {
-               my $regen_max = 0;
-               # can't use 'rev-list --count' if we use --diff-filter
-               my $fh = $git->popen(qw(log --pretty=tformat:%h
-                               --no-notes --no-color --no-renames
-                               --diff-filter=AM), $range);
-               ++$regen_max while <$fh>;
-               my (undef, $max) = $self->{mm}->minmax;
-
-               if ($max && $max == $regen_max) {
+               if ($max && $max == $fcount) {
                        # fix up old bugs in full indexes which caused messages to
                        # not appear in Msgmap
                        $self->{regen_up} = $max;
                } else {
                        # normal regen is for for fresh data
-                       $self->{regen_down} = $regen_max;
+                       $self->{regen_down} = $fcount;
                }
+       } else {
+               # Give oldest messages the smallest numbers
+               $self->{regen_down} = $max + $fcount;
        }
 
        $git->popen(qw/log --no-notes --no-color --no-renames