]> Sergey Matveev's repositories - public-inbox.git/commitdiff
msg_iter: provide means to stop using anonymous subs
authorEric Wong <e@80x24.org>
Wed, 25 Dec 2019 07:50:40 +0000 (07:50 +0000)
committerEric Wong <e@80x24.org>
Thu, 26 Dec 2019 10:48:19 +0000 (10:48 +0000)
And remove the last anonymous sub in SolverGit itself.

lib/PublicInbox/MsgIter.pm
lib/PublicInbox/SolverGit.pm

index 6453d9f1043630d267d19c8c1445ef8a288f3abe..cdd78b39b2afaf75dea36062c40354afab2c1e18 100644 (file)
@@ -12,8 +12,8 @@ use PublicInbox::MIME;
 # Like Email::MIME::walk_parts, but this is:
 # * non-recursive
 # * passes depth and indices to the iterator callback
-sub msg_iter ($$) {
-       my ($mime, $cb) = @_;
+sub msg_iter ($$;$) {
+       my ($mime, $cb, $cb_arg) = @_;
        my @parts = $mime->subparts;
        if (@parts) {
                my $i = 0;
@@ -27,11 +27,11 @@ sub msg_iter ($$) {
                                @sub = map { [ $_, $depth, @idx, ++$i ] } @sub;
                                @parts = (@sub, @parts);
                        } else {
-                               $cb->($p);
+                               $cb->($p, $cb_arg);
                        }
                }
        } else {
-               $cb->([$mime, 0, 0]);
+               $cb->([$mime, 0, 0], $cb_arg);
        }
 }
 
index fd43940f6901f083de5e5c7c73b2a6ec553645e5..9266fb087b8ca429d6e7b56a98b6a7aded339426 100644 (file)
@@ -93,8 +93,9 @@ sub solve_existing ($$) {
        scalar(@ambiguous) ? \@ambiguous : undef;
 }
 
-sub extract_diff ($$$$$) {
-       my ($self, $p, $re, $ibx, $smsg) = @_;
+sub extract_diff ($$) {
+       my ($p, $arg) = @_;
+       my ($self, $diffs, $re, $ibx, $smsg) = @$arg;
        my ($part) = @$p; # ignore $depth and @idx;
        my $hdr_lines; # diff --git a/... b/...
        my $tmp;
@@ -170,7 +171,7 @@ sub extract_diff ($$$$$) {
        }
        return undef unless $tmp;
        close $tmp or die "close(tmp): $!";
-       $di;
+       push @$diffs, $di;
 }
 
 sub path_searchable ($) { defined($_[0]) && $_[0] =~ m!\A[\w/\. \-]+\z! }
@@ -209,16 +210,14 @@ sub find_extract_diffs ($$$) {
 
        my $msgs = $srch->query($q, { relevance => 1 });
        my $re = qr/\Aindex ($pre[a-f0-9]*)\.\.($post[a-f0-9]*)(?: ([0-9]+))?/;
-
-       my @di;
+       my $diffs = [];
        foreach my $smsg (@$msgs) {
                $ibx->smsg_mime($smsg) or next;
-               msg_iter(delete($smsg->{mime}), sub {
-                       my $di = extract_diff($self, $_[0], $re, $ibx, $smsg);
-                       push @di, $di if defined($di);
-               });
+               my $mime = delete $smsg->{mime};
+               msg_iter($mime, \&extract_diff,
+                               [$self, $diffs, $re, $ibx, $smsg]);
        }
-       @di ? \@di : undef;
+       @$diffs ? $diffs : undef;
 }
 
 sub update_index_result ($$) {