- if (!defined($mid0) || $del) {
- if (!defined($mid0) && $del) { # expected for deletes
- $num = $sync->{regen}--;
- $self->{mm}->num_highwater($num) if !$sync->{reindex};
- return
+sub check_unindexed ($$$) {
+ my ($self, $num, $mid0) = @_;
+ my $unindexed = $self->{unindexed} // {};
+ my $n = delete($unindexed->{$mid0});
+ defined $n or return;
+ if ($n != $num) {
+ die "BUG: unindexed $n != $num <$mid0>\n";
+ } else {
+ $self->{mm}->mid_set($num, $mid0);
+ }
+}
+
+sub reindex_oid ($$$$) {
+ my ($self, $sync, $git, $oid) = @_;
+ my ($num, $mid0, $len);
+ my $msgref = $git->cat_file($oid, \$len);
+ return if $len == 0; # purged
+ my $mime = PublicInbox::MIME->new($$msgref);
+ my $mids = mids($mime->header_obj);
+ my $cid = content_id($mime);
+
+ if (scalar(@$mids) == 0) {
+ warn "E: $oid has no Message-ID, skipping\n";
+ return;
+ } elsif (scalar(@$mids) == 1) {
+ my $mid = $mids->[0];
+
+ # was the file previously marked as deleted?, skip if so
+ if (delete($sync->{D}->{"$mid\0$cid"})) {
+ if (!$sync->{reindex}) {
+ $num = $sync->{regen}--;
+ $self->{mm}->num_highwater($num);
+ }
+ return;