From 857dabb16740e4f4cf325680ebda9bbeeee51d2e Mon Sep 17 00:00:00 2001 From: nick evans Date: Sat, 7 Jan 2023 10:26:35 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=87=20Add=20silence=5Fthread=5Fsafety?= =?UTF-8?q?=5Fdeprecation=5Fwarnings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is provided as a temporary workaround, until dependant projects can update their usage. --- lib/net/imap.rb | 14 +++++++++++++- test/net/imap/test_imap.rb | 11 +++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/net/imap.rb b/lib/net/imap.rb index 70dd2bcb..92c8bec8 100644 --- a/lib/net/imap.rb +++ b/lib/net/imap.rb @@ -716,8 +716,18 @@ class << self alias default_imap_port default_port alias default_imaps_port default_tls_port alias default_ssl_port default_tls_port + + # Set to true to silence deprecation warnings, e.g. from #responses. + # Defaults to false. + # + # These warnings are concerning thread-safety issues, so it is recommended + # to update other code and leave this value. Deprecated usage will + # become errors regardless of this setting, so use this only temporarily. + attr_accessor :silence_thread_safety_deprecation_warnings end + self.silence_thread_safety_deprecation_warnings = false + def client_thread # :nodoc: warn "Net::IMAP#client_thread is deprecated and will be removed soon." @client_thread @@ -2107,7 +2117,9 @@ def responses(type = nil) elsif type raise ArgumentError, "Pass a block or use #clear_responses" else - warn("DEPRECATED: pass a block or use #clear_responses", uplevel: 1) + unless IMAP.silence_thread_safety_deprecation_warnings + warn("DEPRECATED: pass a block or use #clear_responses", uplevel: 1) + end @responses end end diff --git a/test/net/imap/test_imap.rb b/test/net/imap/test_imap.rb index d8285ab5..05d6912b 100644 --- a/test/net/imap/test_imap.rb +++ b/test/net/imap/test_imap.rb @@ -873,6 +873,8 @@ def test_enable end def test_responses + original_silence = Net::IMAP.silence_thread_safety_deprecation_warnings + Net::IMAP.silence_thread_safety_deprecation_warnings = false with_fake_server do |server, imap| # responses available before SELECT/EXAMINE assert_equal(%w[IMAP4REV1 NAMESPACE MOVE IDLE UTF8=ACCEPT], @@ -891,7 +893,16 @@ def test_responses assert_equal(%i[Answered Flagged Deleted Seen Draft], imap.responses["FLAGS"]&.last) end + Net::IMAP.silence_thread_safety_deprecation_warnings = true + # TODO: assert_no_warn? + stderr = EnvUtil.verbose_warning { + assert_equal(%i[Answered Flagged Deleted Seen Draft], + imap.responses["FLAGS"]&.last) + } + assert_empty stderr end + ensure + Net::IMAP.silence_thread_safety_deprecation_warnings = original_silence end def test_clear_responses