create_tables($dbh);
$dbh->begin_work;
$self->created_at(time) unless $self->created_at;
+
+ my (undef, $max) = $self->minmax();
+ $max ||= 0;
+ $self->num_highwater($max);
$dbh->commit;
}
$self;
$self->meta_accessor('created_at', $second);
}
+sub num_highwater {
+ my ($self, $num) = @_;
+ my $high = $self->{num_highwater} ||=
+ $self->meta_accessor('num_highwater');
+ if (defined($num) && (!defined($high) || ($num > $high))) {
+ $self->{num_highwater} = $num;
+ $self->meta_accessor('num_highwater', $num);
+ }
+ $self->{num_highwater};
+}
+
sub mid_insert {
my ($self, $mid) = @_;
my $dbh = $self->{dbh};
INSERT OR IGNORE INTO msgmap (mid) VALUES (?)
return if $sth->execute($mid) == 0;
- $dbh->last_insert_id(undef, undef, 'msgmap', 'num');
+ my $num = $dbh->last_insert_id(undef, undef, 'msgmap', 'num');
+ $self->num_highwater($num) unless !defined($num);
+ $num;
}
sub mid_for {
$self->{dbh}->prepare(
'INSERT OR IGNORE INTO msgmap (num,mid) VALUES (?,?)');
};
- $sth->execute($num, $mid);
+ my $result = $sth->execute($num, $mid);
+ $self->num_highwater($num) if (defined($result) && $result == 1);
+ $result;
}
sub DESTROY {
--no-notes --no-color --no-renames
--diff-filter=AM), $range);
++$fcount while <$fh>;
- my (undef, $max) = $self->{mm}->minmax;
+ my $high = $self->{mm}->num_highwater;
if (index($range, '..') < 0) {
- if ($max && $max == $fcount) {
+ if ($high && $high == $fcount) {
# fix up old bugs in full indexes which caused messages to
# not appear in Msgmap
- $self->{regen_up} = $max;
+ $self->{regen_up} = $high;
} else {
# normal regen is for for fresh data
$self->{regen_down} = $fcount;
}
} else {
# Give oldest messages the smallest numbers
- $self->{regen_down} = $max + $fcount;
+ $self->{regen_down} = $high + $fcount;
}
$git->popen(qw/log --no-notes --no-color --no-renames
my $mm_tmp = $self->{mm}->tmp_clone;
my $ranges = $opts->{reindex} ? [] : $self->last_commits($epoch_max);
- my ($min, $max) = $mm_tmp->minmax;
+ my $high = $self->{mm}->num_highwater();
my $regen = $self->index_prepare($opts, $epoch_max, $ranges);
- $$regen += $max if $max;
+ $$regen += $high if $high;
my $D = {}; # "$mid\0$cid" => $oid
my @cmd = qw(log --raw -r --pretty=tformat:%H
--no-notes --no-color --no-abbrev --no-renames);