about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-10-13 07:00:35 +0000
committerEric Wong <e@80x24.org>2021-10-13 19:51:18 +0000
commit6bb8478c8dacf83492de3afe15a615d646f0904f (patch)
tree0e1aaf64816b118f4890509b86caf043e4c7fa7c /lib
parent759493eb1eb737e9dedd30b8280bc4067077c615 (diff)
downloadpublic-inbox-6bb8478c8dacf83492de3afe15a615d646f0904f.tar.gz
warn() is easier to augment with context information, and
frankly unavoidable in the presence of 3rd-party libraries
we don't control.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/Fetch.pm2
-rw-r--r--lib/PublicInbox/LEI.pm18
-rw-r--r--lib/PublicInbox/LeiBlob.pm2
-rw-r--r--lib/PublicInbox/LeiConvert.pm2
-rw-r--r--lib/PublicInbox/LeiForgetExternal.pm5
-rw-r--r--lib/PublicInbox/LeiImport.pm7
-rw-r--r--lib/PublicInbox/LeiImportKw.pm2
-rw-r--r--lib/PublicInbox/LeiInput.pm4
-rw-r--r--lib/PublicInbox/LeiMailSync.pm4
-rw-r--r--lib/PublicInbox/LeiMirror.pm8
-rw-r--r--lib/PublicInbox/LeiP2q.pm2
-rw-r--r--lib/PublicInbox/LeiRediff.pm2
-rw-r--r--lib/PublicInbox/LeiRemote.pm2
-rw-r--r--lib/PublicInbox/LeiViewText.pm2
-rw-r--r--lib/PublicInbox/LeiXSearch.pm25
15 files changed, 49 insertions, 38 deletions
diff --git a/lib/PublicInbox/Fetch.pm b/lib/PublicInbox/Fetch.pm
index 5ada1f49..e5756fb6 100644
--- a/lib/PublicInbox/Fetch.pm
+++ b/lib/PublicInbox/Fetch.pm
@@ -52,7 +52,7 @@ sub do_manifest ($$$) {
                 $m0 = eval {
                         PublicInbox::LeiMirror::decode_manifest($fh, $mf, $mf)
                 };
-                $lei->err($@) if $@;
+                warn($@) if $@;
         }
         my ($bn) = ($fn =~ m!/([^/]+)\z!);
         my $curl_cmd = $lei->{curl}->for_uri($lei, $muri, qw(-R -o), $bn);
diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm
index 183cb545..bd8a6bef 100644
--- a/lib/PublicInbox/LEI.pm
+++ b/lib/PublicInbox/LEI.pm
@@ -471,6 +471,7 @@ sub _drop_wq {
 # pronounced "exit": x_it(1 << 8) => exit(1); x_it(13) => SIGPIPE
 sub x_it ($$) {
         my ($self, $code) = @_;
+        local $current_lei = $self;
         # make sure client sees stdout before exit
         $self->{1}->autoflush(1) if $self->{1};
         stop_pager($self);
@@ -504,6 +505,7 @@ sub qfin { # show message on finalization (LeiFinmsg)
 
 sub fail_handler ($;$$) {
         my ($lei, $code, $io) = @_;
+        local $current_lei = $lei;
         close($io) if $io; # needed to avoid warnings on SIGPIPE
         _drop_wq($lei);
         x_it($lei, $code // (1 << 8));
@@ -521,6 +523,7 @@ sub sigint_reap {
 
 sub fail ($$;$) {
         my ($self, $buf, $exit_code) = @_;
+        local $current_lei = $self;
         $self->{failed}++;
         warn($buf, "\n") if defined $buf;
         $self->{pkt_op_p}->pkt_do('fail_handler') if $self->{pkt_op_p};
@@ -541,6 +544,7 @@ sub puts ($;@) { out(shift, map { "$_\n" } @_) }
 
 sub child_error { # passes non-fatal curl exit codes to user
         my ($self, $child_error, $msg) = @_; # child_error is $?
+        local $current_lei = $self;
         $child_error ||= 1 << 8;
         warn($msg, "\n") if defined $msg;
         if ($self->{pkt_op_p}) { # to top lei-daemon
@@ -1019,7 +1023,7 @@ sub poke_mua { # forces terminal MUAs to wake up and hopefully notice new mail
                         $cmd = [ Text::ParseWords::shellwords($cmd) ];
                         send($sock, exec_buf($cmd, {}), MSG_EOR) if $sock;
                 } else {
-                        err($self, "W: unsupported --alert=$op"); # non-fatal
+                        warn("W: unsupported --alert=$op\n"); # non-fatal
                 }
         }
 }
@@ -1068,7 +1072,7 @@ sub start_pager {
 # display a message for user before spawning full-screen $VISUAL
 sub pgr_err {
         my ($self, @msg) = @_;
-        return $self->err(@msg) unless $self->{sock} && -t $self->{2};
+        return warn(@msg) unless $self->{sock} && -t $self->{2};
         start_pager($self, { LESS => 'RX' }); # no 'F' so we prompt
         print { $self->{2} } @msg;
         $self->{2}->autoflush(1);
@@ -1118,6 +1122,7 @@ sub accept_dispatch { # Listener {post_accept} callback
 
 sub dclose {
         my ($self) = @_;
+        local $current_lei = $self;
         delete $self->{-progress};
         _drop_wq($self) if $self->{failed};
         $self->close if $self->{-event_init_done}; # PublicInbox::DS::close
@@ -1369,6 +1374,7 @@ sub DESTROY {
 sub wq_done_wait { # dwaitpid callback
         my ($arg, $pid) = @_;
         my ($wq, $lei) = @$arg;
+        local $current_lei = $lei;
         my $err_type = $lei->{-err_type};
         $? and $lei->child_error($?,
                         $err_type ? "$err_type errors during $lei->{cmd}" : ());
@@ -1383,6 +1389,7 @@ sub fchdir {
 
 sub wq_eof { # EOF callback for main daemon
         my ($lei) = @_;
+        local $current_lei = $lei;
         my $wq1 = delete $lei->{wq1} // return $lei->fail; # already failed
         $wq1->wq_wait_old($wq1->can('_wq_done_wait') // \&wq_done_wait, $lei);
 }
@@ -1423,7 +1430,7 @@ sub refresh_watches {
                 $seen{$url} = undef;
                 my $state = $cfg->get_1("watch.$url.state");
                 if (!watch_state_ok($state)) {
-                        $lei->err("watch.$url.state=$state not supported");
+                        warn("watch.$url.state=$state not supported\n");
                         next;
                 }
                 if ($url =~ /\Amaildir:(.+)/i) {
@@ -1492,6 +1499,7 @@ sub lms {
 
 sub sto_done_request {
         my ($lei, $sock) = @_;
+        local $current_lei = $lei;
         eval {
                 if ($sock //= $lei->{sock}) { # issue, async wait
                         $lei->{sto}->wq_io_do('done', [ $sock ]);
@@ -1499,14 +1507,14 @@ sub sto_done_request {
                         my $wait = $lei->{sto}->wq_do('done');
                 }
         };
-        $lei->err($@) if $@;
+        warn($@) if $@;
 }
 
 sub cfg_dump ($$) {
         my ($lei, $f) = @_;
         my $ret = eval { PublicInbox::Config->git_config_dump($f, $lei->{2}) };
         return $ret if !$@;
-        $lei->err($@);
+        warn($@);
         undef;
 }
 
diff --git a/lib/PublicInbox/LeiBlob.pm b/lib/PublicInbox/LeiBlob.pm
index b94f67a0..a3ddbbce 100644
--- a/lib/PublicInbox/LeiBlob.pm
+++ b/lib/PublicInbox/LeiBlob.pm
@@ -40,7 +40,7 @@ sub solver_user_cb { # called by solver when done
         # don't try to support all the git-show(1) options for non-blob,
         # this is just a convenience:
         $type ne 'blob' and
-                $lei->err("# $oid is a $type of $size bytes in:\n#\t$gd");
+                warn "# $oid is a $type of $size bytes in:\n#\t$gd\n";
 
         my $cmd = [ 'git', "--git-dir=$gd", 'show', $oid ];
         my $rdr = { 1 => $lei->{1}, 2 => $lei->{2} };
diff --git a/lib/PublicInbox/LeiConvert.pm b/lib/PublicInbox/LeiConvert.pm
index 6550c242..9e98edc3 100644
--- a/lib/PublicInbox/LeiConvert.pm
+++ b/lib/PublicInbox/LeiConvert.pm
@@ -41,7 +41,7 @@ sub process_inputs { # via wq_do
         delete $lei->{1};
         delete $self->{wcb}; # commit
         my $nr = delete($lei->{-nr_write}) // 0;
-        $lei->err("# converted $nr messages") if $lei->{opt}->{verbose};
+        $lei->qerr("# converted $nr messages");
 }
 
 sub lei_convert { # the main "lei convert" method
diff --git a/lib/PublicInbox/LeiForgetExternal.pm b/lib/PublicInbox/LeiForgetExternal.pm
index 7a4bbcf8..07f0ac80 100644
--- a/lib/PublicInbox/LeiForgetExternal.pm
+++ b/lib/PublicInbox/LeiForgetExternal.pm
@@ -20,10 +20,9 @@ sub lei_forget_external {
                         if ($? == 0) {
                                 $lei->qerr("# $l forgotten ");
                         } elsif (($? >> 8) == 5) {
-                                $lei->err("# $l not found");
+                                warn("# $l not found\n");
                         } else {
-                                $lei->err("# --unset $key error");
-                                return $lei->x_it($?);
+                                $lei->child_error($?, "# --unset $key error");
                         }
                 }
         }
diff --git a/lib/PublicInbox/LeiImport.pm b/lib/PublicInbox/LeiImport.pm
index 69d63ab6..2f8fd6c6 100644
--- a/lib/PublicInbox/LeiImport.pm
+++ b/lib/PublicInbox/LeiImport.pm
@@ -38,7 +38,7 @@ sub pmdir_cb { # called via wq_io_do from LeiPmdir->each_mdir_fn
         my $lse = $self->{lse} //= $self->{lei}->{sto}->search;
         my $lms = $self->{-lms_ro} //= $self->{lei}->lms; # may be 0 or undef
         my @oidbin = $lms ? $lms->name_oidbin($folder, $bn) : ();
-        @oidbin > 1 and $self->{lei}->err("W: $folder/*/$$bn not unique:\n",
+        @oidbin > 1 and warn("W: $folder/*/$$bn not unique:\n",
                                 map { "\t".unpack('H*', $_)."\n" } @oidbin);
         my %seen;
         my @docids = sort { $a <=> $b } grep { !$seen{$_}++ }
@@ -100,9 +100,8 @@ sub do_import_index ($$@) {
                 my $nproc = $self->detect_nproc;
                 $j = $nproc if $j > $nproc;
         }
-        if ($lei->{opt}->{'new-only'} && (!$net || !$net->{imap_order})) {
-                $lei->err('# --new-only is only for IMAP');
-        }
+        ($lei->{opt}->{'new-only'} && (!$net || !$net->{imap_order})) and
+                warn "# --new-only is only for IMAP\n";
         my $ops = {};
         $lei->{auth}->op_merge($ops, $self) if $lei->{auth};
         $lei->{-eml_noisy} = 1;
diff --git a/lib/PublicInbox/LeiImportKw.pm b/lib/PublicInbox/LeiImportKw.pm
index c35c5c26..8359f338 100644
--- a/lib/PublicInbox/LeiImportKw.pm
+++ b/lib/PublicInbox/LeiImportKw.pm
@@ -36,7 +36,7 @@ sub ck_update_kw { # via wq_io_do
         my ($self, $url, $uid, $kw) = @_;
         my @oidbin = $self->{-lms_ro}->num_oidbin($url, $uid);
         my $uid_url = "$url/;UID=$uid";
-        @oidbin > 1 and $self->{lei}->err("W: $uid_url not unique:\n",
+        @oidbin > 1 and warn("W: $uid_url not unique:\n",
                                 map { "\t".unpack('H*', $_)."\n" } @oidbin);
         my %seen;
         my @docids = sort { $a <=> $b } grep { !$seen{$_}++ }
diff --git a/lib/PublicInbox/LeiInput.pm b/lib/PublicInbox/LeiInput.pm
index 83479221..6a90e7e1 100644
--- a/lib/PublicInbox/LeiInput.pm
+++ b/lib/PublicInbox/LeiInput.pm
@@ -343,8 +343,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;
diff --git a/lib/PublicInbox/LeiMailSync.pm b/lib/PublicInbox/LeiMailSync.pm
index f7e37ad9..f2f1e3ed 100644
--- a/lib/PublicInbox/LeiMailSync.pm
+++ b/lib/PublicInbox/LeiMailSync.pm
@@ -466,7 +466,7 @@ sub arg2folder {
 # using `$res' instead of `$orig'
 EOM
                         } else {
-                                $lei->err($res) if defined $res;
+                                warn($res, "\n") if defined $res;
                                 push @no, $orig;
                         }
                 } elsif (m!\A(?:nntps?|s?news)://!i) {
@@ -478,7 +478,7 @@ EOM
 # using `$res' instead of `$orig'
 EOM
                         } else {
-                                $lei->err($res) if defined $res;
+                                warn($res, "\n") if defined $res;
                                 push @no, $orig;
                         }
                 } else {
diff --git a/lib/PublicInbox/LeiMirror.pm b/lib/PublicInbox/LeiMirror.pm
index 4be8f70a..ec41bec6 100644
--- a/lib/PublicInbox/LeiMirror.pm
+++ b/lib/PublicInbox/LeiMirror.pm
@@ -20,7 +20,7 @@ sub _wq_done_wait { # dwaitpid callback (via wq_eof)
         if ($?) {
                 $lei->child_error($?);
         } elsif (!unlink($f)) {
-                $lei->err("unlink($f): $!") unless $!{ENOENT};
+                warn("unlink($f): $!\n") unless $!{ENOENT};
         } else {
                 if ($lei->{cmd} ne 'public-inbox-clone') {
                         $lei->lazy_cb('add-external', '_finish_'
@@ -120,7 +120,7 @@ sub _try_config {
                 -d $dst or die "mkpath($dst): $!\n";
         }
         my $err = _get_txt($self, qw(_/text/config/raw inbox.config.example));
-        return $self->{lei}->err($err) if $err;
+        return warn($err, "\n") if $err;
         my $f = "$self->{dst}/inbox.config.example";
         chmod((stat($f))[2] & 0444, $f) or die "chmod(a-w, $f): $!";
         my $cfg = PublicInbox::Config->git_config_dump($f, $self->{lei}->{2});
@@ -151,7 +151,7 @@ sub index_cloned_inbox {
         my ($self, $iv) = @_;
         my $lei = $self->{lei};
         my $err = _get_txt($self, qw(description description));
-        $lei->err($err) if $err; # non fatal
+        warn($err, "\n") if $err; # non fatal
         eval { set_description($self) };
         warn $@ if $@;
 
@@ -380,7 +380,7 @@ sub try_manifest {
         my ($path_pfx, $v1_path, @v2_epochs) = deduce_epochs($m, $path);
         if (@v2_epochs) {
                 # It may be possible to have v1 + v2 in parallel someday:
-                $lei->err(<<EOM) if defined $v1_path;
+                warn(<<EOM) if defined $v1_path;
 # `$v1_path' appears to be a v1 inbox while v2 epochs exist:
 # @v2_epochs
 # ignoring $v1_path (use --inbox-version=1 to force v1 instead)
diff --git a/lib/PublicInbox/LeiP2q.pm b/lib/PublicInbox/LeiP2q.pm
index c0c4563d..5c2ce0a1 100644
--- a/lib/PublicInbox/LeiP2q.pm
+++ b/lib/PublicInbox/LeiP2q.pm
@@ -135,7 +135,7 @@ sub do_p2q { # via wq_do
         if ($lei->{opt}->{debug}) {
                 my $json = ref(PublicInbox::Config->json)->new;
                 $json->utf8->canonical->pretty;
-                $lei->err($json->encode($lei->{qterms}));
+                print { $lei->{2} } $json->encode($lei->{qterms});
         }
         my (@q, %seen);
         for my $pfx (@want) {
diff --git a/lib/PublicInbox/LeiRediff.pm b/lib/PublicInbox/LeiRediff.pm
index decb721b..740cbcee 100644
--- a/lib/PublicInbox/LeiRediff.pm
+++ b/lib/PublicInbox/LeiRediff.pm
@@ -30,7 +30,7 @@ sub rediff_user_cb { # called by solver when done
 
         # don't try to support all the git-show(1) options for non-blob,
         # this is just a convenience:
-        $type ne 'blob' and return $lei->err(<<EOF);
+        $type ne 'blob' and return warn(<<EOF);
 # $oid is a $type of $size bytes in:
 # $git->{git_dir} (wanted: $oid_want)
 EOF
diff --git a/lib/PublicInbox/LeiRemote.pm b/lib/PublicInbox/LeiRemote.pm
index 346aa6a4..7782aa9d 100644
--- a/lib/PublicInbox/LeiRemote.pm
+++ b/lib/PublicInbox/LeiRemote.pm
@@ -75,7 +75,7 @@ sub smsg_eml {
         if (my $bref = $self->{lei}->ale->git->cat_file($smsg->{blob})) {
                 return PublicInbox::Eml->new($bref);
         }
-        $self->{lei}->err("E: $self->{uri} $smsg->{blob} gone <$smsg->{mid}>");
+        warn("E: $self->{uri} $smsg->{blob} gone <$smsg->{mid}>\n");
         undef;
 }
 
diff --git a/lib/PublicInbox/LeiViewText.pm b/lib/PublicInbox/LeiViewText.pm
index c469d1ea..2dad3b78 100644
--- a/lib/PublicInbox/LeiViewText.pm
+++ b/lib/PublicInbox/LeiViewText.pm
@@ -77,7 +77,7 @@ sub new {
         my $cfg = PublicInbox::Config::config_fh_parse($r, "\0", "\n");
         waitpid($pid, 0);
         if ($?) {
-                $lei->err("# git-config failed, no color (non-fatal)");
+                warn "# git-config failed, no color (non-fatal)\n";
                 return $self;
         }
         $self->{-colored} = \&my_colored;
diff --git a/lib/PublicInbox/LeiXSearch.pm b/lib/PublicInbox/LeiXSearch.pm
index ae9f5881..fee1b859 100644
--- a/lib/PublicInbox/LeiXSearch.pm
+++ b/lib/PublicInbox/LeiXSearch.pm
@@ -16,6 +16,7 @@ use PublicInbox::Spawn qw(popen_rd spawn which);
 use PublicInbox::MID qw(mids);
 use PublicInbox::Smsg;
 use PublicInbox::Eml;
+use PublicInbox::LEI;
 use Fcntl qw(SEEK_SET F_SETFL O_APPEND O_RDWR);
 use PublicInbox::ContentHash qw(git_sha);
 use POSIX qw(strftime);
@@ -392,11 +393,11 @@ sub query_remote_mboxrd {
                 $err = '';
                 if (-s $cerr) {
                         seek($cerr, 0, SEEK_SET) or
-                                        $lei->err("seek($cmd stderr): $!");
+                                        warn "seek($cmd stderr): $!";
                         $err = do { local $/; <$cerr> } //
-                                        "read($cmd stderr): $!";
+                                        warn "read($cmd stderr): $!";
                         truncate($cerr, 0) or
-                                        $lei->err("truncate($cmd stderr): $!");
+                                        warn "truncate($cmd stderr): $!";
                 }
                 next if (($? >> 8) == 22 && $err =~ /\b404\b/);
                 $uri->query_form(q => $qstr);
@@ -416,6 +417,7 @@ sub xsearch_done_wait { # dwaitpid callback
 
 sub query_done { # EOF callback for main daemon
         my ($lei) = @_;
+        local $PublicInbox::LEI::current_lei = $lei;
         my $l2m = delete $lei->{l2m};
         $l2m->wq_wait_old(\&xsearch_done_wait, $lei) if $l2m;
         if (my $lxs = delete $lei->{lxs}) {
@@ -462,6 +464,7 @@ Error closing $lei->{ovv}->{dst}: $!
 
 sub do_post_augment {
         my ($lei) = @_;
+        local $PublicInbox::LEI::current_lei = $lei;
         my $l2m = $lei->{l2m} or return; # client disconnected
         $lei->fchdir or return;
         my $err;
@@ -497,9 +500,10 @@ sub concurrency {
         $nl + $nr;
 }
 
-sub start_query ($;$) { # always runs in main (lei-daemon) process
-        my ($self, $l2m) = @_;
-        if ($self->{opt_threads} || ($l2m && !$self->{opt_sort})) {
+sub start_query ($$) { # always runs in main (lei-daemon) process
+        my ($self, $lei) = @_;
+        local $PublicInbox::LEI::current_lei = $lei;
+        if ($self->{opt_threads} || ($lei->{l2m} && !$self->{opt_sort})) {
                 for my $ibxish (locals($self)) {
                         $self->wq_io_do('query_one_mset', [], $ibxish);
                 }
@@ -521,9 +525,10 @@ sub start_query ($;$) { # always runs in main (lei-daemon) process
 }
 
 sub incr_start_query { # called whenever an l2m shard starts do_post_auth
-        my ($self, $l2m) = @_;
+        my ($self, $lei) = @_;
+        my $l2m = $lei->{l2m};
         return if ++$self->{nr_start_query} != $l2m->{-wq_nr_workers};
-        start_query($self, $l2m);
+        start_query($self, $lei);
 }
 
 sub ipc_atfork_child {
@@ -545,7 +550,7 @@ sub do_query {
                 'l2m_progress' => [ \&l2m_progress, $lei ],
                 'x_it' => [ $lei ],
                 'child_error' => [ $lei ],
-                'incr_start_query' => [ $self, $l2m ],
+                'incr_start_query' => [ $self, $lei ],
         };
         $lei->{auth}->op_merge($ops, $l2m) if $l2m && $lei->{auth};
         my $end = $lei->pkt_op_pair;
@@ -586,7 +591,7 @@ sub do_query {
         if ($l2m) {
                 $l2m->net_merge_all_done($lei) unless $lei->{auth};
         } else {
-                start_query($self);
+                start_query($self, $lei);
         }
         $lei->event_step_init; # wait for shutdowns
         $lei->wait_wq_events($op_c, $ops);