summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThe Bundler Bot <bot@bundler.io>2017-10-23 10:56:11 +0000
committerSamuel Giddins <segiddins@segiddins.me>2017-10-30 13:55:59 -0500
commit78249aabe7a117009e5ab760961304123c6b6081 (patch)
tree547edfb46cb62c83d725bf875bb7e5e7c191080a
parentc4b77b0b7d3c47f5c334d3fb6e701a81a77d496d (diff)
downloadbundler-78249aabe7a117009e5ab760961304123c6b6081.tar.gz
Auto merge of #6119 - bundler:seg-ruby-2-5-digest-gem, r=colby-swandale
Avoid activating stdlib digest under Ruby 2.5 The problem was, under ruby 2.5, Bundler would activate digest, which is now a stdlib gem, preventing users from choosing a different version. With this change, the travis build against trunk should go green, hopefully. My diagnosis was we needed to lazy-load digest. My fix removes all `require "digest"` top-level statements from the Bundler codebase, and replaces the top-level `Digest` method with one that will `require "digest"`. I chose this fix because it would keep the use of digest classes thread-safe. \c @hsbt (cherry picked from commit b9c12ee67661581f8a4fb5f47a375b5c7da2ed1e)
-rw-r--r--bundler.gemspec5
-rw-r--r--lib/bundler/compact_index_client/cache.rb4
-rw-r--r--lib/bundler/compact_index_client/updater.rb2
-rw-r--r--lib/bundler/definition.rb1
-rw-r--r--lib/bundler/plugin/api/source.rb3
-rw-r--r--lib/bundler/rubygems_gem_installer.rb2
-rw-r--r--lib/bundler/runtime.rb2
-rw-r--r--lib/bundler/shared_helpers.rb5
-rw-r--r--lib/bundler/source/git.rb3
-rw-r--r--lib/bundler/source/rubygems/remote.rb2
10 files changed, 13 insertions, 16 deletions
diff --git a/bundler.gemspec b/bundler.gemspec
index 3de9c4db74..dade77f32e 100644
--- a/bundler.gemspec
+++ b/bundler.gemspec
@@ -1,9 +1,8 @@
# coding: utf-8
# frozen_string_literal: true
-lib = File.expand_path("../lib/", __FILE__)
-$:.unshift lib unless $:.include?(lib)
-require "bundler/version"
+require File.expand_path("../lib/bundler/version", __FILE__)
+require "shellwords"
Gem::Specification.new do |s|
s.name = "bundler"
diff --git a/lib/bundler/compact_index_client/cache.rb b/lib/bundler/compact_index_client/cache.rb
index 029e53c30d..f6105d3bb3 100644
--- a/lib/bundler/compact_index_client/cache.rb
+++ b/lib/bundler/compact_index_client/cache.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require "digest"
-
module Bundler
class CompactIndexClient
class Cache
@@ -69,7 +67,7 @@ module Bundler
def info_path(name)
name = name.to_s
if name =~ /[^a-z0-9_-]/
- name += "-#{Digest(:MD5).hexdigest(name).downcase}"
+ name += "-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}"
info_roots.last.join(name)
else
info_roots.first.join(name)
diff --git a/lib/bundler/compact_index_client/updater.rb b/lib/bundler/compact_index_client/updater.rb
index 9451423446..3a4e4441ca 100644
--- a/lib/bundler/compact_index_client/updater.rb
+++ b/lib/bundler/compact_index_client/updater.rb
@@ -99,7 +99,7 @@ module Bundler
# because we need to preserve \n line endings on windows when calculating
# the checksum
SharedHelpers.filesystem_access(path, :read) do
- Digest(:MD5).hexdigest(IO.read(path))
+ SharedHelpers.digest(:MD5).hexdigest(IO.read(path))
end
end
end
diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb
index f872baa3ce..ae8e12c0e9 100644
--- a/lib/bundler/definition.rb
+++ b/lib/bundler/definition.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
require "bundler/lockfile_parser"
-require "digest"
require "set"
module Bundler
diff --git a/lib/bundler/plugin/api/source.rb b/lib/bundler/plugin/api/source.rb
index b27f919253..586477efb5 100644
--- a/lib/bundler/plugin/api/source.rb
+++ b/lib/bundler/plugin/api/source.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
require "uri"
-require "digest"
module Bundler
module Plugin
@@ -272,7 +271,7 @@ module Bundler
end
def uri_hash
- Digest(:SHA1).hexdigest(uri)
+ SharedHelpers.digest(:SHA1).hexdigest(uri)
end
# Note: Do not override if you don't know what you are doing.
diff --git a/lib/bundler/rubygems_gem_installer.rb b/lib/bundler/rubygems_gem_installer.rb
index e7e1a7e940..2b7fa8e0f6 100644
--- a/lib/bundler/rubygems_gem_installer.rb
+++ b/lib/bundler/rubygems_gem_installer.rb
@@ -48,7 +48,7 @@ module Bundler
return true unless source = @package.instance_variable_get(:@gem)
return true unless source.respond_to?(:with_read_io)
digest = source.with_read_io do |io|
- digest = Digest::SHA256.new
+ digest = SharedHelpers.digest(:SHA256).new
digest << io.read(16_384) until io.eof?
io.rewind
send(checksum_type(checksum), digest)
diff --git a/lib/bundler/runtime.rb b/lib/bundler/runtime.rb
index d86fa51372..f27597b854 100644
--- a/lib/bundler/runtime.rb
+++ b/lib/bundler/runtime.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require "digest"
-
module Bundler
class Runtime
include SharedHelpers
diff --git a/lib/bundler/shared_helpers.rb b/lib/bundler/shared_helpers.rb
index a18966b324..45185209f1 100644
--- a/lib/bundler/shared_helpers.rb
+++ b/lib/bundler/shared_helpers.rb
@@ -218,6 +218,11 @@ module Bundler
end
end
+ def digest(name)
+ require "digest"
+ Digest(name)
+ end
+
private
def validate_bundle_path
diff --git a/lib/bundler/source/git.rb b/lib/bundler/source/git.rb
index d9f658d8bb..a1a59ddce5 100644
--- a/lib/bundler/source/git.rb
+++ b/lib/bundler/source/git.rb
@@ -2,7 +2,6 @@
require "bundler/vendored_fileutils"
require "uri"
-require "digest"
module Bundler
class Source
@@ -284,7 +283,7 @@ module Bundler
# If there is no URI scheme, assume it is an ssh/git URI
input = uri
end
- Digest(:SHA1).hexdigest(input)
+ SharedHelpers.digest(:SHA1).hexdigest(input)
end
def cached_revision
diff --git a/lib/bundler/source/rubygems/remote.rb b/lib/bundler/source/rubygems/remote.rb
index 9ee1a53eea..e73baaa992 100644
--- a/lib/bundler/source/rubygems/remote.rb
+++ b/lib/bundler/source/rubygems/remote.rb
@@ -26,7 +26,7 @@ module Bundler
cache_uri = original_uri || uri
uri_parts = [cache_uri.host, cache_uri.user, cache_uri.port, cache_uri.path]
- uri_digest = Digest(:MD5).hexdigest(uri_parts.compact.join("."))
+ uri_digest = SharedHelpers.digest(:MD5).hexdigest(uri_parts.compact.join("."))
uri_parts[-1] = uri_digest
uri_parts.compact.join(".")