Skip to content

Commit c835ad5

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 163e3fb commit c835ad5

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
@@ -704,8 +704,18 @@ class << self
704704
alias default_imap_port default_port
705705
alias default_imaps_port default_tls_port
706706
alias default_ssl_port default_tls_port
707+
708+
# Set to true to silence deprecation warnings, e.g. from #responses.
709+
# Defaults to false.
710+
#
711+
# These warnings are concerning thread-safety issues, so it is recommended
712+
# to update other code and leave this value. Deprecated usage will
713+
# become errors regardless of this setting, so use this only temporarily.
714+
attr_accessor :silence_thread_safety_deprecation_warnings
707715
end
708716

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

@@ -2311,7 +2321,9 @@ def responses(type = nil)
23112321
elsif type
23122322
raise ArgumentError, "Pass a block or use #clear_responses"
23132323
else
2314-
warn("DEPRECATED: pass a block or use #clear_responses", uplevel: 1)
2324+
unless IMAP.silence_thread_safety_deprecation_warnings
2325+
warn("DEPRECATED: pass a block or use #clear_responses", uplevel: 1)
2326+
end
23152327
@responses
23162328
end
23172329
end

test/net/imap/test_imap.rb

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

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

0 commit comments

Comments
 (0)