From e111f38f34ea6b48446a0c29e142ccf44cfff282 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Sun, 5 May 2019 19:00:47 +0200 Subject: [PATCH] [bundler/bundler] Fix file:// handling under Windows Windows paths do not start with a slash, so we add an extra slash to separate the host from the path in file:// urls. Otherwise "D:" is parsed as the host segment in the URI. The path for those URLs now starts with "/", so we ignore that leading character when using the URI's path. This reduces Windows CI spec failures from 429 to 355. https://github.com/bundler/bundler/commit/1b7e274cbc --- lib/bundler/fetcher.rb | 3 ++- lib/bundler/fetcher/index.rb | 3 ++- spec/bundler/support/path.rb | 5 +++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/bundler/fetcher.rb b/lib/bundler/fetcher.rb index d21baf659d..8084a530d1 100644 --- a/lib/bundler/fetcher.rb +++ b/lib/bundler/fetcher.rb @@ -99,7 +99,8 @@ module Bundler uri = URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz") if uri.scheme == "file" - Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(uri.path)) + path = Gem.win_platform? ? uri.path[1..-1] : uri.path + Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(path)) elsif cached_spec_path = gemspec_cached_path(spec_file_name) Bundler.load_gemspec(cached_spec_path) else diff --git a/lib/bundler/fetcher/index.rb b/lib/bundler/fetcher/index.rb index 9beb0e27d8..d10c21b041 100644 --- a/lib/bundler/fetcher/index.rb +++ b/lib/bundler/fetcher/index.rb @@ -30,7 +30,8 @@ module Bundler uri = URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz") if uri.scheme == "file" - Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(uri.path)) + path = Gem.win_platform? ? uri.path[1..-1] : uri.path + Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(path)) elsif cached_spec_path = gemspec_cached_path(spec_file_name) Bundler.load_gemspec(cached_spec_path) else diff --git a/spec/bundler/support/path.rb b/spec/bundler/support/path.rb index 28682a1f25..ca05ef5e3b 100644 --- a/spec/bundler/support/path.rb +++ b/spec/bundler/support/path.rb @@ -64,10 +64,11 @@ module Spec def file_uri_for(path) protocol = "file://" + root = Gem.win_platform? ? "/" : "" - return protocol + "localhost" + path.to_s if RUBY_VERSION < "2.5" + return protocol + "localhost" + root + path.to_s if RUBY_VERSION < "2.5" - protocol + path.to_s + protocol + root + path.to_s end def gem_repo1(*args)