about summary refs log tree commit homepage
path: root/lib/PublicInbox/ExtMsg.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-12-25 07:50:52 +0000
committerEric Wong <e@80x24.org>2019-12-27 20:00:37 +0000
commit4bffd23fdd592c356c9b3d56b202d178a12fec43 (patch)
treeec64798ce143b45a300bd23de3a4c6226ec4acaf /lib/PublicInbox/ExtMsg.pm
parent8b192073ae9e940ec066811aaa5618a1601f0565 (diff)
downloadpublic-inbox-4bffd23fdd592c356c9b3d56b202d178a12fec43.tar.gz
Another place where we can replace anonymous subs with named
subs by passing a user-supplied arg.
Diffstat (limited to 'lib/PublicInbox/ExtMsg.pm')
-rw-r--r--lib/PublicInbox/ExtMsg.pm48
1 files changed, 27 insertions, 21 deletions
diff --git a/lib/PublicInbox/ExtMsg.pm b/lib/PublicInbox/ExtMsg.pm
index 47f00b5e..0138d373 100644
--- a/lib/PublicInbox/ExtMsg.pm
+++ b/lib/PublicInbox/ExtMsg.pm
@@ -74,33 +74,39 @@ sub search_partial ($$) {
         }
 }
 
+sub ext_msg_i {
+        my ($other, $arg) = @_;
+        my ($cur, $mid, $ibxs, $found) = @$arg;
+
+        return if $other->{name} eq $cur->{name} || !$other->base_url;
+
+        my $mm = $other->mm or return;
+
+        # try to find the URL with Msgmap to avoid forking
+        my $num = $mm->num_for($mid);
+        if (defined $num) {
+                push @$found, $other;
+        } else {
+                # no point in trying the fork fallback if we
+                # know Xapian is up-to-date but missing the
+                # message in the current repo
+                push @$ibxs, $other;
+        }
+}
+
 sub ext_msg {
         my ($ctx) = @_;
         my $cur = $ctx->{-inbox};
         my $mid = $ctx->{mid};
 
         eval { require PublicInbox::Msgmap };
-        my (@ibx, @found);
-
-        $ctx->{www}->{pi_config}->each_inbox(sub {
-                my ($other) = @_;
-                return if $other->{name} eq $cur->{name} || !$other->base_url;
-
-                my $mm = $other->mm or return;
-
-                # try to find the URL with Msgmap to avoid forking
-                my $num = $mm->num_for($mid);
-                if (defined $num) {
-                        push @found, $other;
-                } else {
-                        # no point in trying the fork fallback if we
-                        # know Xapian is up-to-date but missing the
-                        # message in the current repo
-                        push @ibx, $other;
-                }
-        });
+        my $ibxs = [];
+        my $found = [];
+        my $arg = [ $cur, $mid, $ibxs, $found ];
+
+        $ctx->{www}->{pi_config}->each_inbox(\&ext_msg_i, $arg);
 
-        return exact($ctx, \@found, $mid) if @found;
+        return exact($ctx, $found, $mid) if @$found;
 
         # fall back to partial MID matching
         my @partial;
@@ -114,7 +120,7 @@ sub ext_msg {
 
         # can't find a partial match in current inbox, try the others:
         if (!$n_partial && length($mid) >= $MIN_PARTIAL_LEN) {
-                foreach my $ibx (@ibx) {
+                foreach my $ibx (@$ibxs) {
                         $srch = $ibx->search or next;
                         $mids = search_partial($srch, $mid) or next;
                         $n_partial += scalar(@$mids);