Skip to content

Commit d800e82

Browse files
committed
🔇 Add silence_thread_safety_deprecation_warnings
This is provided as a temporary workaround, until dependant projects can update their usage. A future release will remove this backwards compatibility, but no sooner than one year after the release that contains this deprecation warning.
1 parent 3410acd commit d800e82

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

lib/net/imap.rb

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -703,8 +703,18 @@ class << self
703703
alias default_imap_port default_port
704704
alias default_imaps_port default_tls_port
705705
alias default_ssl_port default_tls_port
706+
707+
# Set to true to silence deprecation warnings, e.g. from #responses.
708+
# Defaults to false.
709+
#
710+
# These warnings are concerning thread-safety issues, so it is recommended
711+
# to update other code and leave this value. Deprecated usage will
712+
# become errors regardless of this setting, so use this only temporarily.
713+
attr_accessor :silence_thread_safety_deprecation_warnings
706714
end
707715

716+
self.silence_thread_safety_deprecation_warnings = false
717+
708718
# Returns the initial greeting the server, an UntaggedResponse.
709719
attr_reader :greeting
710720

@@ -2307,7 +2317,9 @@ def responses(type = nil)
23072317
elsif type
23082318
raise ArgumentError, "Pass a block or use #clear_responses"
23092319
else
2310-
warn("DEPRECATED: pass a block or use #clear_responses", uplevel: 1)
2320+
unless IMAP.silence_thread_safety_deprecation_warnings
2321+
warn("DEPRECATED: pass a block or use #clear_responses", uplevel: 1)
2322+
end
23112323
@responses
23122324
end
23132325
end

test/net/imap/test_imap.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,6 +1072,8 @@ def test_enable
10721072

10731073
def test_responses
10741074
with_fake_server do |server, imap|
1075+
original_silence = Net::IMAP.silence_thread_safety_deprecation_warnings
1076+
Net::IMAP.silence_thread_safety_deprecation_warnings = false
10751077
# responses available before SELECT/EXAMINE
10761078
assert_equal(%w[IMAP4REV1 NAMESPACE MOVE IDLE UTF8=ACCEPT],
10771079
imap.responses("CAPABILITY", &:last))
@@ -1089,6 +1091,15 @@ def test_responses
10891091
assert_equal(%i[Answered Flagged Deleted Seen Draft],
10901092
imap.responses["FLAGS"]&.last)
10911093
end
1094+
Net::IMAP.silence_thread_safety_deprecation_warnings = true
1095+
# TODO: assert_no_warn?
1096+
stderr = EnvUtil.verbose_warning {
1097+
assert_equal(%i[Answered Flagged Deleted Seen Draft],
1098+
imap.responses["FLAGS"]&.last)
1099+
}
1100+
assert_empty stderr
1101+
ensure
1102+
Net::IMAP.silence_thread_safety_deprecation_warnings = original_silence
10921103
end
10931104
end
10941105

0 commit comments

Comments
 (0)