+sub _lcat_i { # LeiMailSync->each_src iterator callback
+ my ($oidbin, $id, $each_smsg) = @_;
+ $each_smsg->({blob => unpack('H*', $oidbin), pct => 100});
+}
+
+sub _lcat2smsg { # git->cat_async callback
+ my ($bref, $oid, $type, $size, $smsg) = @_;
+ if ($bref) {
+ my $eml = PublicInbox::Eml->new($bref);
+ my $json_dump = delete $smsg->{-json_dump};
+ bless $smsg, 'PublicInbox::Smsg';
+ _smsg_fill($smsg, $eml);
+ $json_dump->($smsg, undef, $eml);
+ }
+}
+
+sub lcat_dump {
+ my ($self) = @_;
+ my $lei = $self->{lei};
+ my $each_smsg = $lei->{ovv}->ovv_each_smsg_cb($lei);
+ my $git = $lei->{ale}->git;
+ if (!$lei->{l2m}) {
+ my $json_dump = $each_smsg;
+ $each_smsg = sub {
+ my ($smsg) = @_;
+ use Data::Dumper;
+ $smsg->{-json_dump} = $json_dump;
+ $git->cat_async($smsg->{blob}, \&_lcat2smsg, $smsg);
+ };
+ }
+ for my $oid (@{$lei->{lcat_blob} // []}) {
+ $each_smsg->({ blob => $oid, pct => 100 });
+ }
+ if (my $fids = delete $lei->{lcat_fid}) {
+ my $lms = $lei->{lse}->lms;
+ for my $fid (@$fids) {
+ $lms->each_src({fid => $fid}, \&_lcat_i, $each_smsg);
+ }
+ }
+ $git->async_wait_all;
+ undef $each_smsg; # may commit
+ $lei->{ovv}->ovv_atexit_child($lei);
+}