]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/LeiImport.pm
www_stream: add trailing slash for help and color links
[public-inbox.git] / lib / PublicInbox / LeiImport.pm
index 7f247b640937bf4387ac353112ade62bff197976..65e37371cdd275254e936f095a08d5c5543ac360 100644 (file)
@@ -11,14 +11,16 @@ use PublicInbox::PktOp qw(pkt_do);
 
 sub _import_eml { # MboxReader callback
        my ($eml, $sto, $set_kw) = @_;
-       $sto->ipc_do('set_eml', $eml, $set_kw ? $sto->mbox_keywords($eml) : ());
+       $sto->ipc_do('set_eml', $eml, $set_kw ?
+               @{PublicInbox::MboxReader::mbox_keywords($eml)} : ());
 }
 
 sub import_done_wait { # dwaitpid callback
        my ($arg, $pid) = @_;
        my ($imp, $lei) = @$arg;
        $lei->child_error($?, 'non-fatal errors during import') if $?;
-       my $ign = $lei->{sto}->ipc_do('done'); # PublicInbox::LeiStore::done
+       my $sto = delete $lei->{sto};
+       my $wait = $sto->ipc_do('done') if $sto; # PublicInbox::LeiStore::done
        $lei->dclose;
 }
 
@@ -80,10 +82,11 @@ sub call { # the main "lei import" method
                        my $ifmt = lc $1;
                        if (($fmt // $ifmt) ne $ifmt) {
                                return $lei->fail(<<"");
---format=$fmt and `$ifmt:' conflict
+--in-format=$fmt and `$ifmt:' conflict
 
                        }
                        if (-f $input_path) {
+                               require PublicInbox::MboxLock;
                                require PublicInbox::MboxReader;
                                PublicInbox::MboxReader->can($ifmt) or return
                                        $lei->fail("$ifmt not supported");
@@ -142,12 +145,12 @@ error reading $input: $!
                        $cb->(undef, $fh, \&_import_eml, $lei->{sto}, $set_kw);
                }
        };
-       $lei->child_error(1 << 8, "<stdin>: $@") if $@;
+       $lei->child_error(1 << 8, "$input: $@") if $@;
 }
 
-sub _import_maildir { # maildir_each_file cb
-       my ($f, $sto, $set_kw) = @_;
-       $sto->ipc_do('set_eml_from_maildir', $f, $set_kw);
+sub _import_maildir { # maildir_each_eml cb
+       my ($f, $kw, $eml, $sto, $set_kw) = @_;
+       $sto->ipc_do('set_eml', $eml, $set_kw ? @$kw : ());
 }
 
 sub _import_net { # imap_each, nntp_each cb
@@ -171,15 +174,15 @@ sub import_path_url {
                $ifmt = lc $1;
        }
        if (-f $input) {
-               open my $fh, '<', $input or return $lei->child_error(1 << 8, <<"");
-unable to open $input: $!
-
-               _import_fh($lei, $fh, $input, $ifmt);
+               my $m = $lei->{opt}->{'lock'} // ($ifmt eq 'eml' ? ['none'] :
+                               PublicInbox::MboxLock->defaults);
+               my $mbl = PublicInbox::MboxLock->acq($input, 0, $m);
+               _import_fh($lei, $mbl->{fh}, $input, $ifmt);
        } elsif (-d _ && (-d "$input/cur" || -d "$input/new")) {
                return $lei->fail(<<EOM) if $ifmt && $ifmt ne 'maildir';
 $input appears to a be a maildir, not $ifmt
 EOM
-               PublicInbox::MdirReader::maildir_each_file($input,
+               PublicInbox::MdirReader::maildir_each_eml($input,
                                        \&_import_maildir,
                                        $lei->{sto}, $lei->{opt}->{kw});
        } else {