X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FLeiInput.pm;h=dd40d83840c57cb2e790fd86d30699b8a11f60c5;hb=4b5a1b5787edee2a3b6cc10a3ccc5721f1414268;hp=22bedba6e6c3acf2814e23987a0922895e46ab6e;hpb=cbc2890cb89b81cb6b9e8fabf3f196d9a6110dce;p=public-inbox.git diff --git a/lib/PublicInbox/LeiInput.pm b/lib/PublicInbox/LeiInput.pm index 22bedba6..dd40d838 100644 --- a/lib/PublicInbox/LeiInput.pm +++ b/lib/PublicInbox/LeiInput.pm @@ -8,6 +8,7 @@ use v5.10.1; use PublicInbox::DS; use PublicInbox::Spawn qw(which popen_rd); use PublicInbox::InboxWritable qw(eml_from_path); +use PublicInbox::AutoReap; # JMAP RFC 8621 4.1.1 # https://www.iana.org/assignments/imap-jmap-keywords/imap-jmap-keywords.xhtml @@ -57,6 +58,12 @@ sub check_input_format ($;$) { 1; } +sub input_mbox_cb { # base MboxReader callback + my ($eml, $self) = @_; + $eml->header_set($_) for (qw(Status X-Status)); + $self->input_eml_cb($eml); +} + # import a single file handle of $name # Subclass must define ->input_eml_cb and ->input_mbox_cb sub input_fh { @@ -96,13 +103,13 @@ sub handle_http_input ($$@) { push @$curl, '-s', @$curl_opt; my $cmd = $curl->for_uri($lei, $uri); $lei->qerr("# $cmd"); - my $rdr = { 2 => $lei->{2}, pgid => 0 }; - my ($fh, $pid) = popen_rd($cmd, undef, $rdr); + my ($fh, $pid) = popen_rd($cmd, undef, { 2 => $lei->{2} }); + my $ar = PublicInbox::AutoReap->new($pid); grep(/\A--compressed\z/, @$curl) or $fh = IO::Uncompress::Gunzip->new($fh, MultiStream => 1); eval { $self->input_fh('mboxrd', $fh, $url, @args) }; my $err = $@; - waitpid($pid, 0); + $ar->join; $? || $err and $lei->child_error($?, "@$cmd failed".$err ? " $err" : ''); } @@ -337,8 +344,8 @@ $input is `eml', not --in-format=$in_fmt --mail-sync specified but no inputs support it # non-fatal if some inputs support support sync - $lei->err("# --mail-sync will only be used for @{$sync->{ok}}"); - $lei->err("# --mail-sync is not supported for: @{$sync->{no}}"); + warn("# --mail-sync will only be used for @{$sync->{ok}}\n"); + warn("# --mail-sync is not supported for: @{$sync->{no}}\n"); } if ($net) { $net->{-can_die} = 1;