unofficial mirror of meta@public-inbox.org
 help / color / mirror / Atom feed
From: Eric Wong <e@80x24.org>
To: meta@public-inbox.org
Subject: [PATCH 2/2] treewide: kill problematic "$h->{k} //= do {" assignments
Date: Mon,  1 Nov 2021 19:06:09 +0000	[thread overview]
Message-ID: <20211101190609.32278-3-e@80x24.org> (raw)
In-Reply-To: <20211101190609.32278-1-e@80x24.org>

As stated in the previous change, conditional hash assignments
which trigger other hash assignments seem problematic, at times.
So replace:

	$h->{k} //= do { $h->{x} = ...; $val };

	$h->{k} // do {
		$h->{x} = ...;
		$hk->{k} = $val
	};

"||=" is affected the same way, and some instances of "||=" are
replaced with "//=" or "// do {", now.
---
 lib/PublicInbox/Config.pm    | 7 +++----
 lib/PublicInbox/Git.pm       | 2 +-
 lib/PublicInbox/IMAP.pm      | 4 ++--
 lib/PublicInbox/Inbox.pm     | 2 +-
 lib/PublicInbox/LEI.pm       | 9 +++++----
 lib/PublicInbox/SharedKV.pm  | 4 ++--
 lib/PublicInbox/WWW.pm       | 4 ++--
 lib/PublicInbox/WwwStatic.pm | 2 +-
 lib/PublicInbox/WwwStream.pm | 4 ++--
 9 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm
index 41117ac5..0f002e5e 100644
--- a/lib/PublicInbox/Config.pm
+++ b/lib/PublicInbox/Config.pm
@@ -377,8 +377,8 @@ sub get_1 {
 
 sub repo_objs {
 	my ($self, $ibxish) = @_;
-	my $ibx_code_repos = $ibxish->{coderepo} or return;
-	$ibxish->{-repo_objs} //= do {
+	my $ibx_code_repos = $ibxish->{coderepo} // return;
+	$ibxish->{-repo_objs} // do {
 		my $code_repos = $self->{-code_repos};
 		my @repo_objs;
 		for my $nick (@$ibx_code_repos) {
@@ -395,10 +395,9 @@ sub repo_objs {
 			push @repo_objs, $repo if $repo;
 		}
 		if (scalar @repo_objs) {
-			\@repo_objs;
+			$ibxish ->{-repo_objs} = \@repo_objs;
 		} else {
 			delete $ibxish->{coderepo};
-			undef;
 		}
 	}
 }
diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm
index 4078dd5b..309f80db 100644
--- a/lib/PublicInbox/Git.pm
+++ b/lib/PublicInbox/Git.pm
@@ -71,7 +71,7 @@ sub new {
 
 sub git_path ($$) {
 	my ($self, $path) = @_;
-	$self->{-git_path}->{$path} ||= do {
+	$self->{-git_path}->{$path} //= do {
 		local $/ = "\n";
 		chomp(my $str = $self->qx(qw(rev-parse --git-path), $path));
 
diff --git a/lib/PublicInbox/IMAP.pm b/lib/PublicInbox/IMAP.pm
index 4a7ff2f4..58a0a9e3 100644
--- a/lib/PublicInbox/IMAP.pm
+++ b/lib/PublicInbox/IMAP.pm
@@ -871,12 +871,12 @@ sub eml_index_offs_i { # PublicInbox::Eml::each_part callback
 # prepares an index for BODY[$SECTION_IDX] fetches
 sub eml_body_idx ($$) {
 	my ($eml, $section_idx) = @_;
-	my $idx = $eml->{imap_all_parts} //= do {
+	my $idx = $eml->{imap_all_parts} // do {
 		my $all = {};
 		$eml->each_part(\&eml_index_offs_i, $all, 0, 1);
 		# top-level of multipart, BODY[0] not allowed (nz-number)
 		delete $all->{0};
-		$all;
+		$eml->{imap_all_parts} = $all;
 	};
 	$idx->{$section_idx};
 }
diff --git a/lib/PublicInbox/Inbox.pm b/lib/PublicInbox/Inbox.pm
index b7b71268..1579d500 100644
--- a/lib/PublicInbox/Inbox.pm
+++ b/lib/PublicInbox/Inbox.pm
@@ -48,7 +48,7 @@ sub _cleanup_later ($) {
 sub _set_limiter ($$$) {
 	my ($self, $pi_cfg, $pfx) = @_;
 	my $lkey = "-${pfx}_limiter";
-	$self->{$lkey} ||= do {
+	$self->{$lkey} //= do {
 		# full key is: publicinbox.$NAME.httpbackendmax
 		my $mkey = $pfx.'max';
 		my $val = $self->{$mkey} or return;
diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm
index 78b49a3b..3e1706a0 100644
--- a/lib/PublicInbox/LEI.pm
+++ b/lib/PublicInbox/LEI.pm
@@ -130,9 +130,10 @@ sub url_folder_cache {
 
 sub ale {
 	my ($self) = @_;
-	$self->{ale} //= do {
+	$self->{ale} // do {
 		require PublicInbox::LeiALE;
-		$self->_lei_cfg(1)->{ale} //= PublicInbox::LeiALE->new($self);
+		my $cfg = $self->_lei_cfg(1);
+		$self->{ale} = $cfg->{ale} //= PublicInbox::LeiALE->new($self);
 	};
 }
 
@@ -1159,10 +1160,10 @@ sub event_step {
 sub event_step_init {
 	my ($self) = @_;
 	my $sock = $self->{sock} or return;
-	$self->{-event_init_done} //= do { # persist til $ops done
+	$self->{-event_init_done} // do { # persist til $ops done
 		$sock->blocking(0);
 		$self->SUPER::new($sock, EPOLLIN);
-		$sock;
+		$self->{-event_init_done} = $sock;
 	};
 }
 
diff --git a/lib/PublicInbox/SharedKV.pm b/lib/PublicInbox/SharedKV.pm
index 27407f83..4297efed 100644
--- a/lib/PublicInbox/SharedKV.pm
+++ b/lib/PublicInbox/SharedKV.pm
@@ -15,7 +15,7 @@ use File::Path qw(rmtree make_path);
 
 sub dbh {
 	my ($self, $lock) = @_;
-	$self->{dbh} //= do {
+	$self->{dbh} // do {
 		my $f = $self->{filename};
 		$lock //= $self->lock_for_scope_fast;
 		my $dbh = DBI->connect("dbi:SQLite:dbname=$f", '', '', {
@@ -36,7 +36,7 @@ CREATE TABLE IF NOT EXISTS kv (
 	UNIQUE (k)
 )
 
-		$dbh;
+		$self->{dbh} = $dbh;
 	}
 }
 
diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm
index b4db0582..a282784a 100644
--- a/lib/PublicInbox/WWW.pm
+++ b/lib/PublicInbox/WWW.pm
@@ -468,7 +468,7 @@ sub serve_mbox_range {
 
 sub news_www {
 	my ($self) = @_;
-	$self->{news_www} ||= do {
+	$self->{news_www} //= do {
 		require PublicInbox::NewsWWW;
 		PublicInbox::NewsWWW->new($self->{pi_cfg});
 	}
@@ -476,7 +476,7 @@ sub news_www {
 
 sub cgit {
 	my ($self) = @_;
-	$self->{cgit} ||= do {
+	$self->{cgit} //= do {
 		my $pi_cfg = $self->{pi_cfg};
 
 		if (defined($pi_cfg->{'publicinbox.cgitrc'})) {
diff --git a/lib/PublicInbox/WwwStatic.pm b/lib/PublicInbox/WwwStatic.pm
index b3476ab8..eeb5e565 100644
--- a/lib/PublicInbox/WwwStatic.pm
+++ b/lib/PublicInbox/WwwStatic.pm
@@ -218,7 +218,7 @@ my %path_re_cache;
 sub path_info_raw ($) {
 	my ($env) = @_;
 	my $sn = $env->{SCRIPT_NAME};
-	my $re = $path_re_cache{$sn} ||= do {
+	my $re = $path_re_cache{$sn} //= do {
 		$sn = '/'.$sn unless index($sn, '/') == 0;
 		$sn =~ s!/\z!!;
 		qr!\A(?:https?://[^/]+)?\Q$sn\E(/[^\?\#]+)!;
diff --git a/lib/PublicInbox/WwwStream.pm b/lib/PublicInbox/WwwStream.pm
index 6d7c447f..aee78170 100644
--- a/lib/PublicInbox/WwwStream.pm
+++ b/lib/PublicInbox/WwwStream.pm
@@ -170,9 +170,9 @@ sub html_oneshot ($$;$) {
 		'Content-Length' => undef ];
 	bless $ctx, __PACKAGE__;
 	$ctx->{gz} = PublicInbox::GzipFilter::gz_or_noop($res_hdr, $ctx->{env});
-	$ctx->{base_url} //= do {
+	$ctx->{base_url} // do {
 		$ctx->zmore(html_top($ctx));
-		base_url($ctx);
+		$ctx->{base_url} = base_url($ctx);
 	};
 	$ctx->zmore($$sref) if $sref;
 	my $bdy = $ctx->zflush(_html_end($ctx));

      parent reply	other threads:[~2021-11-01 19:06 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-01 19:06 [PATCH 0/2] avoid problematic conditional hash assignments Eric Wong
2021-11-01 19:06 ` [PATCH 1/2] idx_stack: avoid conditional hash assignment weirdness Eric Wong
2021-11-01 19:06 ` Eric Wong [this message]

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=20211101190609.32278-3-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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).