]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/LeiToMail.pm
lei q: support mbox locking by default
[public-inbox.git] / lib / PublicInbox / LeiToMail.pm
index 4f8706e7d56e4de6ca04289720724f463edd082b..de64065706c6960c60f9ca7b3303808378b447ba 100644 (file)
@@ -218,7 +218,7 @@ sub _post_augment_mbox { # open a compressor process
        my $cmd = zsfx2cmd($zsfx, undef, $lei);
        my ($r, $w) = @{delete $lei->{zpipe}};
        my $rdr = { 0 => $r, 1 => $lei->{1}, 2 => $lei->{2} };
-       my $pid = spawn($cmd, $lei->{env}, $rdr);
+       my $pid = spawn($cmd, undef, $rdr);
        my $pp = gensym;
        my $dup = bless { "pid.$pid" => $cmd }, ref($lei);
        $dup->{$_} = $lei->{$_} for qw(2 sock);
@@ -231,7 +231,7 @@ sub _post_augment_mbox { # open a compressor process
 sub decompress_src ($$$) {
        my ($in, $zsfx, $lei) = @_;
        my $cmd = zsfx2cmd($zsfx, 1, $lei);
-       popen_rd($cmd, $lei->{env}, { 0 => $in, 2 => $lei->{2} });
+       popen_rd($cmd, undef, { 0 => $in, 2 => $lei->{2} });
 }
 
 sub dup_src ($) {
@@ -463,11 +463,19 @@ sub _pre_augment_mbox {
        my ($self, $lei) = @_;
        my $dst = $lei->{ovv}->{dst};
        if ($dst ne '/dev/stdout') {
-               my $mode = -p $dst ? '>' : '+>>';
-               if (-f _ && !$lei->{opt}->{augment} and !unlink($dst)) {
-                       $! == ENOENT or die "unlink($dst): $!";
+               my $out;
+               if (-p $dst) {
+                       open $out, '>', $dst or die "open($dst): $!";
+               } elsif (-f _ || !-e _) {
+                       require PublicInbox::MboxLock;
+                       my $m = $lei->{opt}->{'lock'} //
+                                       PublicInbox::MboxLock->defaults;
+                       $self->{mbl} = PublicInbox::MboxLock->acq($dst, 1, $m);
+                       $out = $self->{mbl}->{fh};
+                       if (!$lei->{opt}->{augment} and !truncate($out, 0)) {
+                               die "truncate($dst): $!";
+                       }
                }
-               open my $out, $mode, $dst or die "open($dst): $!";
                $lei->{old_1} = $lei->{1}; # keep for spawning MUA
                $lei->{1} = $out;
        }