summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Giddins <segiddins@segiddins.me>2016-08-10 11:13:59 -0500
committerSamuel Giddins <segiddins@segiddins.me>2016-08-10 11:13:59 -0500
commitef2a97745ce708beca37cf233dcd6f94d2278d3a (patch)
treee94e41b6176678143b6326e8ec1d17bef399648e
parente74464116ea107fc4a4b954bd4cf176509ced736 (diff)
downloadbundler-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.rb18
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