]> Sergey Matveev's repositories - public-inbox.git/commitdiff
treewide: use warn() or carp() instead of env->{psgi.errors}
authorEric Wong <e@80x24.org>
Wed, 13 Oct 2021 07:00:36 +0000 (07:00 +0000)
committerEric Wong <e@80x24.org>
Wed, 13 Oct 2021 19:51:20 +0000 (19:51 +0000)
Large chunks of our codebase and 3rd-party dependencies do not
use ->{psgi.errors}, so trying to standardize on it was a
fruitless endeavor.  Since warn() and carp() are standard
mechanism within Perl, just use that instead and simplify a
bunch of existing code.

12 files changed:
lib/PublicInbox/GitHTTPBackend.pm
lib/PublicInbox/GzipFilter.pm
lib/PublicInbox/HTTP.pm
lib/PublicInbox/LeiBlob.pm
lib/PublicInbox/LeiRediff.pm
lib/PublicInbox/LeiXSearch.pm
lib/PublicInbox/Qspawn.pm
lib/PublicInbox/SearchView.pm
lib/PublicInbox/Unsubscribe.pm
lib/PublicInbox/ViewVCS.pm
lib/PublicInbox/WwwAltId.pm
lib/PublicInbox/WwwHighlight.pm

index b9a3e4f5b93eceb3372e0414df76ab8900e6ee7c..ba3a8f208949aeac9a67a3bf5e8bfaf24b54e217 100644 (file)
@@ -5,13 +5,14 @@
 # or smart HTTP.  This is our wrapper for git-http-backend(1)
 package PublicInbox::GitHTTPBackend;
 use strict;
-use warnings;
+use v5.10.1;
 use Fcntl qw(:seek);
 use IO::Handle; # ->flush
 use HTTP::Date qw(time2str);
 use PublicInbox::Qspawn;
 use PublicInbox::Tmpfile;
 use PublicInbox::WwwStatic qw(r @NO_CACHE);
+use Carp ();
 
 # 32 is same as the git-daemon connection limit
 my $default_limiter = PublicInbox::Qspawn::Limiter->new(32);
@@ -45,10 +46,7 @@ sub serve {
        serve_dumb($env, $git, $path);
 }
 
-sub err ($@) {
-       my ($env, @msg) = @_;
-       $env->{'psgi.errors'}->print(@msg, "\n");
-}
+sub ucarp { Carp::carp(@_); undef }
 
 my $prev = 0;
 my $exp;
@@ -118,37 +116,18 @@ sub input_prepare {
 
        my $input = $env->{'psgi.input'};
        my $fd = eval { fileno($input) };
-       if (defined $fd && $fd >= 0) {
-               return { 0 => $fd };
-       }
+       return { 0 => $fd } if (defined $fd && $fd >= 0);
        my $id = "git-http.input.$env->{REMOTE_ADDR}:$env->{REMOTE_PORT}";
-       my $in = tmpfile($id);
-       unless (defined $in) {
-               err($env, "could not open temporary file: $!");
-               return;
-       }
+       my $in = tmpfile($id) // return ucarp("tmpfile: $!");
        my $buf;
        while (1) {
-               my $r = $input->read($buf, 8192);
-               unless (defined $r) {
-                       err($env, "error reading input: $!");
-                       return;
-               }
+               my $r = $input->read($buf, 8192) // return ucarp("read $!");
                last if $r == 0;
-               unless (print $in $buf) {
-                       err($env, "error writing temporary file: $!");
-                       return;
-               }
+               print $in $buf // return ucarp("print: $!");
        }
        # ensure it's visible to git-http-backend(1):
-       unless ($in->flush) {
-               err($env, "error writing temporary file: $!");
-               return;
-       }
-       unless (defined(sysseek($in, 0, SEEK_SET))) {
-               err($env, "error seeking temporary file: $!");
-               return;
-       }
+       $in->flush // return ucarp("flush: $!");
+       sysseek($in, 0, SEEK_SET) // return ucarp($env, "seek: $!");
        { 0 => $in };
 }
 
index 624c2ed3418ce1353264eb2f6e6b63df5a3b0a89..c621617107259ec05954b0eef5370c282f773166 100644 (file)
@@ -154,8 +154,7 @@ sub close {
 sub bail  {
        my $self = shift;
        if (my $env = $self->{env}) {
-               eval { $env->{'psgi.errors'}->print(@_, "\n") };
-               warn("E: error printing to psgi.errors: $@", @_) if $@;
+               warn @_, "\n";
                my $http = $env->{'psgix.io'} or return; # client abort
                eval { $http->close }; # should hit our close
                warn "E: error in http->close: $@" if $@;
index 82c2b200c4dd65d9041f4e325a5e95081c85c5c2..8a89dd73b031e56fcb3bd1440026299d1a3f0e52 100644 (file)
@@ -171,7 +171,7 @@ sub app_dispatch {
                }
        };
        if ($@) {
-               err($self, "response_write error: $@");
+               warn "response_write error: $@";
                $self->close;
        }
 }
@@ -285,14 +285,14 @@ sub getline_pull {
                        return; # likely
                }
        } elsif ($@) {
-               err($self, "response ->getline error: $@");
+               warn "response ->getline error: $@";
                $self->close;
        }
        # avoid recursion
        if (delete $self->{forward}) {
                eval { $forward->close };
                if ($@) {
-                       err($self, "response ->close error: $@");
+                       warn "response ->close error: $@";
                        $self->close; # idempotent
                }
        }
@@ -360,15 +360,11 @@ sub input_prepare {
 
 sub env_chunked { ($_[0]->{HTTP_TRANSFER_ENCODING} // '') =~ /\Achunked\z/i }
 
-sub err ($$) {
-       eval { $_[0]->{httpd}->{env}->{'psgi.errors'}->print($_[1]."\n") };
-}
-
 sub write_err {
        my ($self, $len) = @_;
        my $msg = $! || '(zero write)';
        $msg .= " ($len bytes remaining)" if defined $len;
-       err($self, "error buffering to input: $msg");
+       warn "error buffering to input: $msg";
        quit($self, 500);
 }
 
@@ -377,7 +373,7 @@ sub recv_err {
        if ($! == EAGAIN) { # epoll/kevent watch already set by do_read
                $self->{input_left} = $len;
        } else {
-               err($self, "error reading input: $! ($len bytes remaining)");
+               warn "error reading input: $! ($len bytes remaining)";
        }
 }
 
@@ -458,7 +454,7 @@ sub close {
        my $self = $_[0];
        if (my $forward = delete $self->{forward}) {
                eval { $forward->close };
-               err($self, "forward ->close error: $@") if $@;
+               warn "forward ->close error: $@" if $@;
        }
        $self->SUPER::close; # PublicInbox::DS::close
 }
index a3ddbbcec211c1916033a36608bede6e442db4ef..b6a62d246657f4d0b0d2c56efa5d6a1ef3f4de68 100644 (file)
@@ -73,7 +73,6 @@ sub do_solve_blob { # via wq_do
                # -cur_di, -qsp, -msg => temporary fields for Qspawn callbacks
                inboxes => [ $self->{lxs}->locals, @rmt ],
        }, 'PublicInbox::SolverGit';
-       $lei->{env}->{'psgi.errors'} = $lei->{2}; # ugh...
        local $PublicInbox::DS::in_loop = 0; # waitpid synchronously
        $solver->solve($lei->{env}, $log, $self->{oid_b}, $hints);
 }
index 740cbcee334fa0cc26bd9a13f56cd186f4de4e1f..56c457fc46933d83f95457d0329b9456037d6435 100644 (file)
@@ -303,7 +303,6 @@ sub ipc_atfork_child {
        $self->{gits} = [ map {
                        PublicInbox::Git->new($lei->rel2abs($_))
                } @{$self->{lei}->{opt}->{'git-dir'}} ];
-       $lei->{env}->{'psgi.errors'} = $lei->{2}; # ugh...
        $lei->{env}->{TMPDIR} = $self->{rdtmp}->dirname;
        if (my $nr = ($lei->{opt}->{drq} || $lei->{opt}->{'dequote-only'})) {
                my $re = '\s*> ' x $nr;
index fee1b859f9c64d2d22292b4b0a1fb4729ba0186b..ee9216feeb238591cd38774e0449605fac9fcbb9 100644 (file)
@@ -33,7 +33,7 @@ sub new {
 sub attach_external {
        my ($self, $ibxish) = @_; # ibxish = ExtSearch or Inbox
        my $desc = $ibxish->{inboxdir} // $ibxish->{topdir};
-       my $srch = $ibxish->search or
+       my $srch = $ibxish->search //
                return warn("$desc not indexed for Xapian ($@ $!)\n");
        my @shards = $srch->xdb_shards_flat or
                return warn("$desc has no Xapian shards\n");
@@ -184,11 +184,10 @@ sub query_one_mset { # for --threads and l2m w/o sort
        my $maxk = "external.$dir.maxuid";
        my $stop_at = $lss ? $lss->{-cfg}->{$maxk} : undef;
        if (defined $stop_at) {
-               die "$maxk=$stop_at has multiple values" if ref $stop_at;
-               my @e;
-               local $SIG{__WARN__} = sub { push @e, @_ };
-               $stop_at += 0;
-               return warn("$maxk=$stop_at: @e") if @e;
+               ref($stop_at) and
+                       return warn("$maxk=$stop_at has multiple values\n");
+               ($stop_at =~ /[^0-9]/) and
+                       return warn("$maxk=$stop_at not numeric\n");
        }
        my $first_ids;
        do {
@@ -392,12 +391,11 @@ sub query_remote_mboxrd {
                }
                $err = '';
                if (-s $cerr) {
-                       seek($cerr, 0, SEEK_SET) or
+                       seek($cerr, 0, SEEK_SET) //
                                        warn "seek($cmd stderr): $!";
                        $err = do { local $/; <$cerr> } //
                                        warn "read($cmd stderr): $!";
-                       truncate($cerr, 0) or
-                                       warn "truncate($cmd stderr): $!";
+                       truncate($cerr, 0) // warn "truncate($cmd stderr): $!";
                }
                next if (($? >> 8) == 22 && $err =~ /\b404\b/);
                $uri->query_form(q => $qstr);
@@ -423,9 +421,8 @@ sub query_done { # EOF callback for main daemon
        if (my $lxs = delete $lei->{lxs}) {
                $lxs->wq_wait_old(\&xsearch_done_wait, $lei);
        }
-       if ($lei->{opt}->{'mail-sync'} && !$lei->{sto}) {
+       ($lei->{opt}->{'mail-sync'} && !$lei->{sto}) and
                warn "BUG: {sto} missing with --mail-sync";
-       }
        $lei->sto_done_request if $lei->{sto};
        my $wait = $lei->{v2w} ? $lei->{v2w}->wq_do('done') : undef;
        $lei->{ovv}->ovv_end($lei);
index b1285eda4a83a8df5d140b166ffc279ad3da5286..a1ff65b65324e177f9e5adad67dec703183434a7 100644 (file)
@@ -76,11 +76,6 @@ sub child_err ($) {
        $msg;
 }
 
-sub log_err ($$) {
-       my ($env, $msg) = @_;
-       $env->{'psgi.errors'}->print($msg, "\n");
-}
-
 sub finalize ($$) {
        my ($self, $err) = @_;
 
@@ -104,7 +99,7 @@ sub finalize ($$) {
                        $self->{err} = $err;
                }
                if ($env && $self->{cmd}) {
-                       log_err($env, join(' ', @{$self->{cmd}}) . ": $err");
+                       warn join(' ', @{$self->{cmd}}) . ": $err";
                }
        }
        if ($qx_cb) {
@@ -188,7 +183,7 @@ sub psgi_qx {
 # PSGI servers.
 sub event_step {
        my ($self, $err) = @_; # $err: $!
-       log_err($self->{psgi_env}, "psgi_{return,qx} $err") if defined($err);
+       warn "psgi_{return,qx} $err" if defined($err);
        finish($self);
        my ($fh, $qx_fh) = delete(@$self{qw(fh qx_fh)});
        $fh->close if $fh; # async-only (psgi_return)
@@ -210,14 +205,14 @@ sub rd_hdr ($) {
                        $total_rd += $r;
                        eval { $ret = $ph_cb->($total_rd, $hdr_buf, $ph_arg) };
                        if ($@) {
-                               log_err($self->{psgi_env}, "parse_hdr: $@");
+                               warn "parse_hdr: $@";
                                $ret = [ 500, [], [ "Internal error\n" ] ];
                        }
                } else {
                        # caller should notify us when it's ready:
                        return if $! == EAGAIN;
                        next if $! == EINTR; # immediate retry
-                       log_err($self->{psgi_env}, "error reading header: $!");
+                       warn "error reading header: $!";
                        $ret = [ 500, [], [ "Internal error\n" ] ];
                }
        } until (defined $ret);
index e74ddb9056c81412877f4d40be4e748bbdba9603..a42867c5f577aee444eeacb2681b538dca717dd2 100644 (file)
@@ -102,11 +102,8 @@ sub mset_summary {
 
        foreach my $m ($mset->items) {
                my $num = shift @nums;
-               my $smsg = delete($num2msg{$num}) or do {
-                       eval {
-                               $m = "$m $num expired\n";
-                               $ctx->{env}->{'psgi.errors'}->print($m);
-                       };
+               my $smsg = delete($num2msg{$num}) // do {
+                       warn "$m $num expired\n";
                        next;
                };
                my $mid = $smsg->{mid};
index d583b9c9831bcc3f145b4beaaf8ab66feb056452..ddbd7a2e52cc28225cdfa05c6a8f883f0a89a95e 100644 (file)
@@ -81,10 +81,7 @@ sub _user_list_addr {
        }
        my $user = eval { $self->{cipher}->decrypt(decode_base64url($u)) };
        if (!defined $user || index($user, '@') < 1) {
-               my $err = quotemeta($@);
-               my $errors = $env->{'psgi.errors'};
-               $errors->print("error decrypting: $u\n");
-               $errors->print("$_\n") for split("\n", $err);
+               warn "error decrypting: $u: ", ($@ ? quotemeta($@) : ());
                $u = Plack::Util::encode_html($u);
                return r($self, 400, 'Bad request', "Failed to decrypt: $u");
        }
index 6365f04547bca74359c611ea307a9b4f8f2f10be..021b70cf2180a935711ad5d602e2c600962f81d0 100644 (file)
@@ -54,7 +54,7 @@ sub stream_blob_parse_hdr { # {parse_hdr} for Qspawn
                                'text/plain; charset=UTF-8', @cl ] ];
                }
                if ($r == 0) {
-                       warn "premature EOF on $oid $$logref\n";
+                       warn "premature EOF on $oid $$logref";
                        return html_page($ctx, 500, $logref);
                }
                @$ctx{qw(-res -logref)} = ($res, $logref);
@@ -111,7 +111,7 @@ sub solve_result {
        my ($log, $hints, $fn) = delete @$ctx{qw(log hints fn)};
 
        unless (seek($log, 0, 0)) {
-               $ctx->{env}->{'psgi.errors'}->print("seek(log): $!\n");
+               warn "seek(log): $!";
                return html_page($ctx, 500, \'seek error');
        }
        $log = do { local $/; <$log> };
@@ -138,7 +138,7 @@ sub solve_result {
        my $blob = $git->cat_file($oid);
        if (!$blob) { # WTF?
                my $e = "Failed to retrieve generated blob ($oid)";
-               $ctx->{env}->{'psgi.errors'}->print("$e ($git->{git_dir})\n");
+               warn "$e ($git->{git_dir})";
                $log = "<pre><b>$e</b></pre>" . $log;
                return html_page($ctx, 500, \$log);
        }
index bf8519848cc5015a15f1bd4b2aec9c9913ea6926..e107dfe06eafb3cbcc3183b73399210c36ea4781 100644 (file)
@@ -15,8 +15,7 @@ sub check_output {
        my ($r, $bref, $ctx) = @_;
        return html_oneshot($ctx, 500) if !defined($r);
        if ($r == 0) {
-               my $err = eval { $ctx->{env}->{'psgi.errors'} } // \*STDERR;
-               $err->print("unexpected EOF from sqlite3\n");
+               warn 'unexpected EOF from sqlite3';
                return html_oneshot($ctx, 501);
        }
        [200, [ qw(Content-Type application/gzip), 'Content-Disposition',
index 3593c2d49e3f6342e52c31fd8eee46214e2c0477..75338806a449f3270232c179ecdf3218c5b3f4b0 100644 (file)
@@ -46,7 +46,7 @@ sub read_in_full ($) {
                return \$buf if $r == 0;
                $off += $r;
        }
-       $env->{'psgi.errors'}->print("input read error: $!\n");
+       warn "input read error: $!";
        undef;
 }