From: Eric Wong <e@80x24.org> To: meta@public-inbox.org Subject: [PATCH 05/11] config: flatten each_inbox and iterate_start args Date: Wed, 9 Sep 2020 06:26:12 +0000 Message-ID: <20200909062618.5940-6-e@80x24.org> (raw) In-Reply-To: <20200909062618.5940-1-e@80x24.org> In Perl, we can simplify callers by passing a single array all the way down the stack instead of a single array ref which needs to be expanded every call. --- lib/PublicInbox/Config.pm | 12 ++++++------ lib/PublicInbox/ExtMsg.pm | 7 +++---- lib/PublicInbox/Watch.pm | 13 ++++++------- lib/PublicInbox/WwwListing.pm | 13 +++++-------- 4 files changed, 20 insertions(+), 25 deletions(-) diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm index ae9ad8de..f78115b6 100644 --- a/lib/PublicInbox/Config.pm +++ b/lib/PublicInbox/Config.pm @@ -90,29 +90,29 @@ sub lookup_name ($$) { } sub each_inbox { - my ($self, $cb, $arg) = @_; + my ($self, $cb, @arg) = @_; # may auto-vivify if config file is non-existent: foreach my $section (@{$self->{-section_order}}) { next if $section !~ m!\Apublicinbox\.([^/]+)\z!; my $ibx = lookup_name($self, $1) or next; - $cb->($ibx, $arg); + $cb->($ibx, @arg); } } sub iterate_start { - my ($self, $cb, $arg) = @_; + my ($self, $cb, @arg) = @_; my $i = 0; - $self->{-iter} = [ \$i, $cb, $arg ]; + $self->{-iter} = [ \$i, $cb, @arg ]; } # for PublicInbox::DS::next_tick, we only call this is if # PublicInbox::DS is already loaded sub event_step { my ($self) = @_; - my ($i, $cb, $arg) = @{$self->{-iter}}; + my ($i, $cb, @arg) = @{$self->{-iter}}; my $section = $self->{-section_order}->[$$i++]; delete($self->{-iter}) unless defined($section); - eval { $cb->($self, $section, $arg) }; + eval { $cb->($self, $section, @arg) }; warn "E: $@ in ${self}::event_step" if $@; PublicInbox::DS::requeue($self) if defined($section); } diff --git a/lib/PublicInbox/ExtMsg.pm b/lib/PublicInbox/ExtMsg.pm index 5dffc65c..929737f1 100644 --- a/lib/PublicInbox/ExtMsg.pm +++ b/lib/PublicInbox/ExtMsg.pm @@ -74,8 +74,7 @@ sub search_partial ($$) { } sub ext_msg_i { - my ($other, $arg) = @_; - my ($cur, $mid, $ibxs, $found) = @$arg; + my ($other, $cur, $mid, $ibxs, $found) = @_; return if $other->{name} eq $cur->{name} || !$other->base_url; @@ -101,9 +100,9 @@ sub ext_msg { eval { require PublicInbox::Msgmap }; my $ibxs = []; my $found = []; - my $arg = [ $cur, $mid, $ibxs, $found ]; - $ctx->{www}->{pi_config}->each_inbox(\&ext_msg_i, $arg); + $ctx->{www}->{pi_config}->each_inbox(\&ext_msg_i, + $cur, $mid, $ibxs, $found); return exact($ctx, $found, $mid) if @$found; diff --git a/lib/PublicInbox/Watch.pm b/lib/PublicInbox/Watch.pm index 17786377..0f41dff2 100644 --- a/lib/PublicInbox/Watch.pm +++ b/lib/PublicInbox/Watch.pm @@ -133,8 +133,7 @@ sub _done_for_now { } sub remove_eml_i { # each_inbox callback - my ($ibx, $arg) = @_; - my ($self, $eml, $loc) = @$arg; + my ($ibx, $self, $eml, $loc) = @_; eval { # try to avoid taking a lock or unnecessary spawning @@ -176,7 +175,7 @@ sub _remove_spam { $path =~ /:2,[A-R]*S[T-Za-z]*\z/ or return; my $eml = eml_from_path($path) or return; local $SIG{__WARN__} = warn_ignore_cb(); - $self->{config}->each_inbox(\&remove_eml_i, [ $self, $eml, $path ]); + $self->{config}->each_inbox(\&remove_eml_i, $self, $eml, $path); } sub import_eml ($$$) { @@ -419,8 +418,8 @@ sub imap_import_msg ($$$$$) { if ($flags =~ /\\Seen\b/) { local $SIG{__WARN__} = warn_ignore_cb(); my $eml = PublicInbox::Eml->new($raw); - my $arg = [ $self, $eml, "$url UID:$uid" ]; - $self->{config}->each_inbox(\&remove_eml_i, $arg); + $self->{config}->each_inbox(\&remove_eml_i, + $self, $eml, "$url UID:$uid"); } } else { die "BUG: destination unknown $inboxes"; @@ -967,8 +966,8 @@ sub nntp_fetch_all ($$$) { } } elsif ($inboxes eq 'watchspam') { my $eml = PublicInbox::Eml->new(\$raw); - my $arg = [ $self, $eml, "$url ARTICLE $art" ]; - $self->{config}->each_inbox(\&remove_eml_i, $arg); + $self->{config}->each_inbox(\&remove_eml_i, + $self, $eml, "$url ARTICLE $art"); } else { die "BUG: destination unknown $inboxes"; } diff --git a/lib/PublicInbox/WwwListing.pm b/lib/PublicInbox/WwwListing.pm index 12b0d9ad..a7c7cbc1 100644 --- a/lib/PublicInbox/WwwListing.pm +++ b/lib/PublicInbox/WwwListing.pm @@ -12,21 +12,19 @@ use PublicInbox::ManifestJsGz; use bytes (); # bytes::length sub list_all_i { - my ($ibx, $arg) = @_; - my ($list, $hide_key) = @$arg; + my ($ibx, $list, $hide_key) = @_; push @$list, $ibx unless $ibx->{-hide}->{$hide_key}; } sub list_all ($$$) { my ($self, $env, $hide_key) = @_; my $list = []; - $self->{pi_config}->each_inbox(\&list_all_i, [ $list, $hide_key ]); + $self->{pi_config}->each_inbox(\&list_all_i, $list, $hide_key); $list; } sub list_match_domain_i { - my ($ibx, $arg) = @_; - my ($list, $hide_key, $re) = @$arg; + my ($ibx, $list, $hide_key, $re) = @_; if (!$ibx->{-hide}->{$hide_key} && grep(/$re/, @{$ibx->{url}})) { push @$list, $ibx; } @@ -37,9 +35,8 @@ sub list_match_domain ($$$) { my $list = []; my $host = $env->{HTTP_HOST} // $env->{SERVER_NAME}; $host =~ s/:[0-9]+\z//; - my $arg = [ $list, $hide_key, - qr!\A(?:https?:)?//\Q$host\E(?::[0-9]+)?/!i ]; - $self->{pi_config}->each_inbox(\&list_match_domain_i, $arg); + $self->{pi_config}->each_inbox(\&list_match_domain_i, $list, $hide_key, + qr!\A(?:https?:)?//\Q$host\E(?::[0-9]+)?/!i); $list; }
next prev parent reply other threads:[~2020-09-09 6:26 UTC|newest] Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-09-09 6:26 [PATCH 00/11] httpd: further reduce event loop monopolization Eric Wong 2020-09-09 6:26 ` [PATCH 01/11] xt/solver: test with public-inbox-httpd, too Eric Wong 2020-09-09 6:26 ` [PATCH 02/11] solver: drop warnings, modernize use v5.10.1, use SEEK_SET Eric Wong 2020-09-09 6:26 ` [PATCH 03/11] use "\&" where possible when referring to subroutines Eric Wong 2020-09-09 6:26 ` [PATCH 04/11] www: manifest.js.gz generation no longer hogs event loop Eric Wong 2020-09-09 6:26 ` Eric Wong [this message] 2020-09-09 6:26 ` [PATCH 06/11] config: split out iterator into separate object Eric Wong 2020-09-09 6:26 ` [PATCH 07/11] t/cgi.t: show stderr on failures Eric Wong 2020-09-09 6:26 ` [PATCH 08/11] extmsg: prevent cross-inbox matches from hogging event loop Eric Wong 2020-09-09 6:26 ` [PATCH 09/11] wwwlisting: avoid " Eric Wong 2020-09-09 6:26 ` [PATCH 10/11] solver: check one git coderepo and inbox at a time Eric Wong 2020-09-09 6:26 ` [PATCH 11/11] solver: break apart inbox blob retrieval Eric Wong 2020-09-10 1:51 ` [PATCH 12/11] solver: async blob retrieval for diff extraction Eric Wong
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style List information: https://public-inbox.org/README * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200909062618.5940-6-e@80x24.org \ --to=e@80x24.org \ --cc=meta@public-inbox.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
user/dev discussion of public-inbox itself This inbox may be cloned and mirrored by anyone: git clone --mirror https://public-inbox.org/meta git clone --mirror http://czquwvybam4bgbro.onion/meta git clone --mirror http://hjrcffqmbrq6wope.onion/meta git clone --mirror http://ou63pmih66umazou.onion/meta # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V1 meta meta/ https://public-inbox.org/meta \ meta@public-inbox.org public-inbox-index meta Example config snippet for mirrors. Newsgroups are available over NNTP: nntp://news.public-inbox.org/inbox.comp.mail.public-inbox.meta nntp://ou63pmih66umazou.onion/inbox.comp.mail.public-inbox.meta nntp://czquwvybam4bgbro.onion/inbox.comp.mail.public-inbox.meta nntp://hjrcffqmbrq6wope.onion/inbox.comp.mail.public-inbox.meta nntp://news.gmane.io/gmane.mail.public-inbox.general note: .onion URLs require Tor: https://www.torproject.org/ code repositories for the project(s) associated with this inbox: https://80x24.org/public-inbox.git AGPL code for this site: git clone https://public-inbox.org/public-inbox.git