summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAkinori MUSHA <knu@idaemons.org>2021-10-01 11:07:19 +0900
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2021-10-12 20:53:18 +0900
commit58ae1efb49e2ba10960a62b4f4e1c01811b71e59 (patch)
treebd633b483ee9747a62b0218d564f9d7ce33e1273 /lib
parent01dc55ffad7f8b28865d7c1138f92b70348436ff (diff)
downloadruby-58ae1efb49e2ba10960a62b4f4e1c01811b71e59.tar.gz
[ruby/digest] Avoid the constant redefinition warning
The gem and bundle commands first load digest via openssl, so loading the digest gem would cause this warning every time one of these commands is run: ``` .../lib/ruby/gems/3.0.0/gems/digest-3.1.0/lib/digest.rb:11: warning: already initialized constant Digest::REQUIRE_MUTEX .../lib/ruby/3.0.0/digest.rb:7: warning: previous definition of REQUIRE_MUTEX was here ``` https://github.com/ruby/digest/commit/16172612d5
Diffstat (limited to 'lib')
-rw-r--r--lib/digest.rb16
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/digest.rb b/lib/digest.rb
index b5ff067e44..7cb0d2c318 100644
--- a/lib/digest.rb
+++ b/lib/digest.rb
@@ -1,10 +1,24 @@
# frozen_string_literal: false
+# The gem and bundle commands (except for bundle exec) first load
+# digest via openssl and then load gems, so if this is installed via
+# gem, we are overwriting the default version of digest. Beware not
+# to break it or cause redefinition warnings.
+#
+# When we introduce incompatible changes and overwriting is not an
+# option, and given that the default version does not have security
+# defects, we may just give up and let those commands just use the
+# default version of digest.
+#
+# return if defined?(Digest) && caller_locations.any? { |l|
+# %r{/(rubygems/gem_runner|bundler/cli)\.rb}.match?(l.path)
+# }
+
require 'digest/loader'
module Digest
# A mutex for Digest().
- REQUIRE_MUTEX = Thread::Mutex.new
+ REQUIRE_MUTEX ||= Thread::Mutex.new
def self.const_missing(name) # :nodoc:
case name