From da702da525174286947831d5f8ececbc01fdf5c6 Mon Sep 17 00:00:00 2001 From: Samuel Giddins Date: Tue, 9 May 2017 18:14:40 -0500 Subject: [Mirror] Properly handle casing of file URIs --- lib/bundler/mirror.rb | 5 +++-- lib/bundler/settings.rb | 2 +- spec/bundler/settings_spec.rb | 16 ++++++++++++++++ 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 -- cgit v1.2.1