diff options
author | Samuel Giddins <segiddins@segiddins.me> | 2016-08-10 11:13:59 -0500 |
---|---|---|
committer | Samuel Giddins <segiddins@segiddins.me> | 2016-08-10 11:13:59 -0500 |
commit | ef2a97745ce708beca37cf233dcd6f94d2278d3a (patch) | |
tree | e94e41b6176678143b6326e8ec1d17bef399648e | |
parent | e74464116ea107fc4a4b954bd4cf176509ced736 (diff) | |
download | bundler-ef2a97745ce708beca37cf233dcd6f94d2278d3a.tar.gz |
[Cache] Add resiliency against case conflicts on a case-insensitive FS
-rw-r--r-- | lib/bundler/vendor/compact_index_client/lib/compact_index_client/cache.rb | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/lib/bundler/vendor/compact_index_client/lib/compact_index_client/cache.rb b/lib/bundler/vendor/compact_index_client/lib/compact_index_client/cache.rb index a370fa402d..d2639ee717 100644 --- a/lib/bundler/vendor/compact_index_client/lib/compact_index_client/cache.rb +++ b/lib/bundler/vendor/compact_index_client/lib/compact_index_client/cache.rb @@ -1,11 +1,12 @@ # frozen_string_literal: true +require "digest/md5" class Bundler::CompactIndexClient class Cache attr_reader :directory def initialize(directory) @directory = Pathname.new(directory).expand_path - FileUtils.mkdir_p info_path(nil) + info_roots.each {|dir| FileUtils.mkdir_p(dir) } end def names @@ -59,7 +60,13 @@ class Bundler::CompactIndexClient end def info_path(name) - directory.join("info", name.to_s) + name = name.to_s + if name =~ /[^a-z0-9_-]/ + name += "-#{Digest::MD5.hexdigest(name).downcase}" + info_roots.last.join(name) + else + info_roots.first.join(name) + end end def specific_dependency(name, version, platform) @@ -94,5 +101,12 @@ class Bundler::CompactIndexClient dependency[-1] = dependency[-1].split("&") if dependency.size > 1 dependency end + + def info_roots + [ + directory.join("info"), + directory.join("info-special-characters"), + ] + end end end |