Merge pull request #10803 from briancain/ensure-gemrc-set

Set gemrc through configuration method rather than relying on environment variable
This commit is contained in:
Brian Cain 2019-05-08 09:12:11 -07:00 committed by GitHub
commit 9a0fa8c061
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 0 deletions

View File

@ -40,6 +40,20 @@ module Vagrant
def initialize
@plugin_gem_path = Vagrant.user_data_path.join("gems", RUBY_VERSION).freeze
@logger = Log4r::Logger.new("vagrant::bundler")
# TODO: Remove fix when https://github.com/rubygems/rubygems/pull/2735
# gets merged and released
#
# Because of a rubygems bug, we need to set the gemrc file path
# through this method rather than relying on the environment varible
# GEMRC. On windows, that path gets split on `:`: and `;`, which means
# the drive letter gets treated as its own path. If that path exists locally,
# (like having a random folder called `c` where the library was invoked),
# it fails thinking the folder `c` is a gemrc file.
gemrc_val = ENV["GEMRC"]
ENV["GEMRC"] = ""
Gem.configuration = Gem::ConfigFile.new(["--config-file", gemrc_val])
ENV["GEMRC"] = gemrc_val
end
# Enable Vagrant environment specific plugins at given data path

View File

@ -28,6 +28,19 @@ describe Vagrant::Bundler do
expect(subject.env_plugin_gem_path).to be_nil
end
describe "#initialize" do
let(:gemrc_location) { "C:\\My\\Config\\File" }
it "should set up GEMRC through a flag instead of GEMRC" do
allow(ENV).to receive(:[]).with("VAGRANT_HOME")
allow(ENV).to receive(:[]).with("USERPROFILE")
allow(ENV).to receive(:[]).with("GEMRC").and_return(gemrc_location)
expect(Gem::ConfigFile).to receive(:new).with(["--config-file", gemrc_location])
init_subject = described_class.new
end
end
describe "#deinit" do
it "should provide method for backwards compatibility" do
subject.deinit