about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-03-04 18:38:29 -0700
committerEric Wong <e@80x24.org>2021-03-05 07:20:21 +0000
commit7d186c6fa885c7b04c9e2a65b3fc501120b7866f (patch)
treefad4e8c5a14b038246ae68fa058e6b068714eb62 /lib
parent2958cd17d58c79c952afae6cfd594595ffcaf4fa (diff)
downloadpublic-inbox-7d186c6fa885c7b04c9e2a65b3fc501120b7866f.tar.gz
commit 6c551bffd75afb41d9b5e4774068abe7e06ed0e7
("lei q: --import-augment for mbox and mbox.gz") added a check to
in _pre_augment_mbox for the option being a ref() to distinguish
between default values and user-supplied values (which are
non-ref SCALARs from Getopt::Long).

However, LeiQuery failed to use a SCALAR ref as the default
value, making the check in _pre_augment_mbox useless.  We
now update LeiQuery to use \1 instead of 1 as the default
value so "lei q -f mboxrd ..." to stdout works once again.

Unfortunately, testing with redirects pointed to regular
files didn't trigger the code paths being updated.  Testing
with a FIFO revealed further bugs in the FIFO handling code
which are also fixed in this commit.

We'll also update the $lei->out error message to be
less-specific about "stdout" and use the term "output", instead,
since LeiToMail replaces stdout for all mbox outputs.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/LEI.pm2
-rw-r--r--lib/PublicInbox/LeiQuery.pm2
-rw-r--r--lib/PublicInbox/LeiToMail.pm8
3 files changed, 8 insertions, 4 deletions
diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm
index 50276a50..50c0a885 100644
--- a/lib/PublicInbox/LEI.pm
+++ b/lib/PublicInbox/LEI.pm
@@ -431,7 +431,7 @@ sub out ($;@) {
         my $self = shift;
         return if print { $self->{1} // return } @_; # likely
         return note_sigpipe($self, 1) if $! == EPIPE;
-        my $err = "error writing to stdout: $!";
+        my $err = "error writing to output: $!";
         delete $self->{1};
         fail($self, $err);
 }
diff --git a/lib/PublicInbox/LeiQuery.pm b/lib/PublicInbox/LeiQuery.pm
index 493a8382..623b92cd 100644
--- a/lib/PublicInbox/LeiQuery.pm
+++ b/lib/PublicInbox/LeiQuery.pm
@@ -52,7 +52,7 @@ sub lei_q {
         my $sto = $self->_lei_store(1);
         my $lse = $sto->search;
         if (($opt->{'import-remote'} //= 1) |
-                        ($opt->{'import-before'} //= 1)) {
+                        (($opt->{'import-before'} //= \1) ? 1 : 0)) {
                 $sto->write_prepare($self);
         }
         if ($opt->{'local'} //= scalar(@only) ? 0 : 1) {
diff --git a/lib/PublicInbox/LeiToMail.pm b/lib/PublicInbox/LeiToMail.pm
index 1e2060fe..13b4f672 100644
--- a/lib/PublicInbox/LeiToMail.pm
+++ b/lib/PublicInbox/LeiToMail.pm
@@ -223,8 +223,6 @@ sub _post_augment_mbox { # open a compressor process
         $dup->{$_} = $lei->{$_} for qw(2 sock);
         tie *$pp, 'PublicInbox::ProcessPipe', $pid, $w, \&reap_compress, $dup;
         $lei->{1} = $pp;
-        die 'BUG: unexpected {ovv}->{lock_path}' if $lei->{ovv}->{lock_path};
-        $lei->{ovv}->ovv_out_lk_init;
 }
 
 sub decompress_src ($$$) {
@@ -495,6 +493,7 @@ sub _pre_augment_mbox {
         my $out = $lei->{1};
         if ($dst ne '/dev/stdout') {
                 if (-p $dst) {
+                        $out = undef;
                         open $out, '>', $dst or die "open($dst): $!";
                 } elsif (-f _ || !-e _) {
                         require PublicInbox::MboxLock;
@@ -521,6 +520,11 @@ sub _pre_augment_mbox {
         if (($self->{zsfx}) = ($dst =~ /\.($zsfx_allow)\z/)) {
                 pipe(my ($r, $w)) or die "pipe: $!";
                 $lei->{zpipe} = [ $r, $w ];
+                $lei->{ovv}->{lock_path} and
+                        die 'BUG: unexpected {ovv}->{lock_path}';
+                $lei->{ovv}->ovv_out_lk_init;
+        } elsif (!$self->{seekable} && !$lei->{ovv}->{lock_path}) {
+                $lei->{ovv}->ovv_out_lk_init;
         }
         $lei->{1} = $out;
         undef;