- defined(my $stk = $sync->{stacks}->[$i]) or return;
- $sync->{stacks}->[$i] = undef;
- my $all = $self->{ibx}->git;
- while (my ($f, $at, $ct, $oid) = $stk->pop_rec) {
- $self->{current_info} = "$i.git $oid";
+ for (my $num = $beg; $num <= $end; $num += $step) {
+ last if $sync->{quit};
+ my $smsg = $ibx->over->get_art($num) or next;
+ $smsg->{self} = $self;
+ $ibx->git->cat_async($smsg->{blob}, \&index_xap_only, $smsg);
+ if ($self->{transact_bytes} >= $self->{batch_bytes}) {
+ ${$sync->{nr}} = $num;
+ reindex_checkpoint($self, $sync);
+ }
+ }
+}
+
+sub index_todo ($$$) {
+ my ($self, $sync, $unit) = @_;
+ return if $sync->{quit};
+ unindex_todo($self, $sync, $unit);
+ my $stk = delete($unit->{stack}) or return;
+ my $all = $self->git;
+ my $index_oid = $self->can('index_oid');
+ my $unindex_oid = $self->can('unindex_oid');
+ my $pfx;
+ if ($unit->{git}->{git_dir} =~ m!/([^/]+)/git/([0-9]+\.git)\z!) {
+ $pfx = "$1 $2"; # v2
+ } else { # v1
+ ($pfx) = ($unit->{git}->{git_dir} =~ m!/([^/]+)\z!g);
+ $pfx //= $unit->{git}->{git_dir};
+ }
+ local $self->{current_info} = "$pfx ";
+ local $sync->{latest_cmt} = \(my $latest_cmt);
+ local $sync->{unit} = $unit;
+ while (my ($f, $at, $ct, $oid, $cmt) = $stk->pop_rec) {
+ if ($sync->{quit}) {
+ warn "waiting to quit...\n";
+ $all->async_wait_all;
+ $self->update_last_commit($sync);
+ return;
+ }
+ my $req = {
+ %$sync,
+ autime => $at,
+ cotime => $ct,
+ oid => $oid,
+ cur_cmt => $cmt
+ };