summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Giddins <segiddins@segiddins.me>2017-05-09 18:14:40 -0500
committerSamuel Giddins <segiddins@segiddins.me>2017-05-09 18:14:40 -0500
commitda702da525174286947831d5f8ececbc01fdf5c6 (patch)
tree7226b36dbc2750e7a57cadaae2e4db54d57f0286
parentd085451947d41a0a3cdde3fd28723e11b842db7c (diff)
downloadbundler-seg-mirror-file-uri-case.tar.gz
[Mirror] Properly handle casing of file URIsseg-mirror-file-uri-case
-rw-r--r--lib/bundler/mirror.rb5
-rw-r--r--lib/bundler/settings.rb2
-rw-r--r--spec/bundler/settings_spec.rb16
3 files changed, 20 insertions, 3 deletions
diff --git a/lib/bundler/mirror.rb b/lib/bundler/mirror.rb
index 9903e158ab..8a081ba91f 100644
--- a/lib/bundler/mirror.rb
+++ b/lib/bundler/mirror.rb
@@ -45,7 +45,8 @@ module Bundler
private
def fetch_valid_mirror_for(uri)
- mirror = @mirrors[uri.to_s.downcase] || @mirrors[URI(uri.to_s).host] || Mirror.new(uri)
+ downcased = uri.to_s.downcase
+ mirror = @mirrors[downcased] || @mirrors[URI(downcased).host] || Mirror.new(uri)
mirror.validate!(@prober)
mirror = Mirror.new(uri) unless mirror.valid?
mirror
@@ -72,7 +73,7 @@ module Bundler
@uri = if uri.nil?
nil
else
- URI(uri.to_s.downcase)
+ URI(uri.to_s)
end
@valid = nil
end
diff --git a/lib/bundler/settings.rb b/lib/bundler/settings.rb
index 81cbb3953c..62c21a2ecb 100644
--- a/lib/bundler/settings.rb
+++ b/lib/bundler/settings.rb
@@ -344,7 +344,7 @@ module Bundler
unless uri.absolute?
raise ArgumentError, format("Gem sources must be absolute. You provided '%s'.", uri)
end
- "#{prefix}#{uri}#{suffix}".downcase
+ "#{prefix}#{uri}#{suffix}"
end
end
end
diff --git a/spec/bundler/settings_spec.rb b/spec/bundler/settings_spec.rb
index ec01827500..a93c41b7d2 100644
--- a/spec/bundler/settings_spec.rb
+++ b/spec/bundler/settings_spec.rb
@@ -184,6 +184,22 @@ that would suck --ehhh=oh geez it looks like i might have broken bundler somehow
it "is case insensitive" do
expect(settings.mirror_for("HTTPS://RUBYGEMS.ORG/")).to eq(mirror_uri)
end
+
+ context "with a file URI" do
+ let(:mirror_uri) { URI("file:/foo/BAR/baz/qUx/") }
+
+ it "returns the mirror URI" do
+ expect(settings.mirror_for(uri)).to eq(mirror_uri)
+ end
+
+ it "converts a string parameter to a URI" do
+ expect(settings.mirror_for("file:/foo/BAR/baz/qUx/")).to eq(mirror_uri)
+ end
+
+ it "normalizes the URI" do
+ expect(settings.mirror_for("file:/foo/BAR/baz/qUx")).to eq(mirror_uri)
+ end
+ end
end
end