about summary refs log tree commit
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-04-19 07:41:22 +0000
committerEric Wong <e@80x24.org>2019-05-06 19:12:15 +0000
commitce18b29d175ef5f01f05d59c95bcf8e0cd40e611 (patch)
tree576188ca61f8a2533e0d153baf7d66472a8921c8
parente1ed79d1e99e2c58b3edb370e60904cf656dd823 (diff)
downloadpublic-inbox-ce18b29d175ef5f01f05d59c95bcf8e0cd40e611.tar.gz
This can help users track down the source of warnings
when presented with imperfect emails.

While we're at it, make the __WARN__ callback in t/v2writable.t
a no-op since we don't check for warnings, there.
-rw-r--r--lib/PublicInbox/SearchIdxPart.pm7
-rw-r--r--lib/PublicInbox/V2Writable.pm5
-rwxr-xr-xscript/public-inbox-index3
-rw-r--r--t/v2writable.t3
4 files changed, 15 insertions, 3 deletions
diff --git a/lib/PublicInbox/SearchIdxPart.pm b/lib/PublicInbox/SearchIdxPart.pm
index 7fe2120a..51d81a0a 100644
--- a/lib/PublicInbox/SearchIdxPart.pm
+++ b/lib/PublicInbox/SearchIdxPart.pm
@@ -48,8 +48,15 @@ sub spawn_worker {
 sub partition_worker_loop ($$$$) {
         my ($self, $r, $part, $bnote) = @_;
         $0 = "pi-v2-partition[$part]";
+        my $current_info = '';
+        my $warn_cb = $SIG{__WARN__} || sub { print STDERR @_ };
+        local $SIG{__WARN__} = sub {
+                chomp $current_info;
+                $warn_cb->("[$part] $current_info: ", @_);
+        };
         $self->begin_txn_lazy;
         while (my $line = $r->getline) {
+                $current_info = $line;
                 if ($line eq "commit\n") {
                         $self->commit_txn_lazy;
                 } elsif ($line eq "close\n") {
diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm
index 6829a343..87e8f3eb 100644
--- a/lib/PublicInbox/V2Writable.pm
+++ b/lib/PublicInbox/V2Writable.pm
@@ -72,6 +72,7 @@ sub new {
                 im => undef, #  PublicInbox::Import
                 parallel => 1,
                 transact_bytes => 0,
+                current_info => '',
                 xpfx => $xpfx,
                 over => PublicInbox::OverIdx->new("$xpfx/over.sqlite3", 1),
                 lock_path => "$dir/inbox.lock",
@@ -949,8 +950,10 @@ sub index_sync {
                 my $fh = $self->{reindex_pipe} = $git->popen(@cmd, $range);
                 my $cmt;
                 while (<$fh>) {
+                        chomp;
+                        $self->{current_info} = "$i.git $_";
                         if (/\A$x40$/o && !defined($cmt)) {
-                                chomp($cmt = $_);
+                                $cmt = $_;
                         } elsif (/\A:\d{6} 100644 $x40 ($x40) [AM]\tm$/o) {
                                 $self->reindex_oid($mm_tmp, $D, $git, $1,
                                                 $regen, $reindex);
diff --git a/script/public-inbox-index b/script/public-inbox-index
index 5adb6e74..2f810a56 100755
--- a/script/public-inbox-index
+++ b/script/public-inbox-index
@@ -85,6 +85,9 @@ sub index_dir {
                                 }
                         }
                 }
+                local $SIG{__WARN__} = sub {
+                        print STDERR $v2w->{current_info}, ': ', @_;
+                };
                 $v2w->index_sync({ reindex => $reindex, prune => $prune });
         } else {
                 my $s = PublicInbox::SearchIdx->new($repo, 1);
diff --git a/t/v2writable.t b/t/v2writable.t
index f1714175..2826513b 100644
--- a/t/v2writable.t
+++ b/t/v2writable.t
@@ -253,10 +253,9 @@ EOF
 }
 
 {
-        my @warn;
         my $x = 'x'x250;
         my $y = 'y'x250;
-        local $SIG{__WARN__} = sub { push @warn, @_ };
+        local $SIG{__WARN__} = sub {};
         $mime->header_set('Subject', 'long mid');
         $mime->header_set('Message-ID', "<$x>");
         ok($im->add($mime), 'add excessively long Message-ID');