If lcat-ing multiple argument types (blobs vs folders),
maintain the original order of the arguments instead of
dumping all blobs before folder contents.
} else {
for my $f (@$folders) {
my $fid = $lms->fid_for($f);
} else {
for my $f (@$folders) {
my $fid = $lms->fid_for($f);
- push @{$lei->{lcat_fid}}, $fid;
+ push @{$lei->{lcat_todo}}, { fid => $fid };
my $lms = $lei->lms or return;
# cf. LeiXsearch->lcat_dump
if (defined $uri->uid) {
my $lms = $lei->lms or return;
# cf. LeiXsearch->lcat_dump
if (defined $uri->uid) {
- my @oidhex = $lms->imap_oidhex($lei, $uri);
- push @{$lei->{lcat_blob}}, @oidhex;
+ push @{$lei->{lcat_todo}}, $lms->imap_oidhex($lei, $uri);
} elsif (defined(my $fid = $lms->fid_for($$uri))) {
} elsif (defined(my $fid = $lms->fid_for($$uri))) {
- push @{$lei->{lcat_fid}}, $fid;
+ push @{$lei->{lcat_todo}}, { fid => $fid };
} else {
lcat_folder($lei, $lms, $$uri);
}
} else {
lcat_folder($lei, $lms, $$uri);
}
my $u = $1;
require PublicInbox::URIimap;
lcat_imap_uri($lei, PublicInbox::URIimap->new($u));
my $u = $1;
require PublicInbox::URIimap;
lcat_imap_uri($lei, PublicInbox::URIimap->new($u));
- '""'; # blank query, using {lcat_blob} or {lcat_fid}
+ '""'; # blank query, using {lcat_todo}
} elsif ($x =~ m!\b(maildir:.+)!i) {
lcat_folder($lei, undef, $1);
} elsif ($x =~ m!\b(maildir:.+)!i) {
lcat_folder($lei, undef, $1);
- '""'; # blank query, using {lcat_blob} or {lcat_fid}
+ '""'; # blank query, using {lcat_todo}
} elsif ($x =~ m!\b([a-z]+?://\S+)!i) {
my $u = $1;
$u =~ s/[\>\]\)\,\.\;]+\z//;
} elsif ($x =~ m!\b([a-z]+?://\S+)!i) {
my $u = $1;
$u =~ s/[\>\]\)\,\.\;]+\z//;
} elsif ($x =~ /\bid:(\S+)/) { # notmuch convention
"mid:$1";
} elsif ($x =~ /\bblob:([0-9a-f]{7,})\b/) {
} elsif ($x =~ /\bid:(\S+)/) { # notmuch convention
"mid:$1";
} elsif ($x =~ /\bblob:([0-9a-f]{7,})\b/) {
- push @{$lei->{lcat_blob}}, $1; # cf. LeiToMail->wq_atexit_child
+ push @{$lei->{lcat_todo}}, $1; # cf. LeiToMail->wq_atexit_child
'""'; # blank query
} else {
undef;
'""'; # blank query
} else {
undef;
@$end = ();
$self->{opt_threads} = $lei->{opt}->{threads};
$self->{opt_sort} = $lei->{opt}->{'sort'};
@$end = ();
$self->{opt_threads} = $lei->{opt}->{threads};
$self->{opt_sort} = $lei->{opt}->{'sort'};
- $self->{-do_lcat} = $lei->{lcat_blob} // $lei->{lcat_fid};
+ $self->{-do_lcat} = !!(delete $lei->{lcat_todo});
if ($l2m) {
$l2m->net_merge_all_done unless $lei->{auth};
} else {
if ($l2m) {
$l2m->net_merge_all_done unless $lei->{auth};
} else {
$git->cat_async($smsg->{blob}, \&_lcat2smsg, $smsg);
};
}
$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);
+ my $lms;
+ for my $ent (@{$lei->{lcat_todo}}) {
+ if (ref $ent eq 'HASH') { # { fid => $fid ,.. }
+ $lms //= $lei->{lse}->lms;
+ $lms->each_src($ent, \&_lcat_i, $each_smsg);
+ } else { # oidhex
+ $each_smsg->({ blob => $ent, pct => 100 });
}
}
$git->async_wait_all;
}
}
$git->async_wait_all;