summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfatkodima <fatkodima123@gmail.com>2019-11-02 18:37:35 +0200
committerfatkodima <fatkodima123@gmail.com>2019-11-22 22:33:54 +0200
commit014d3d0663d07e6e517ac60ad7b9b017c5dc9d2d (patch)
treeab59c125d4fa70a552fcb35d2bc1c4a73e785158
parenta11c104c5b6222c018248b585cca2a4f340a9a71 (diff)
downloadbundler-014d3d0663d07e6e517ac60ad7b9b017c5dc9d2d.tar.gz
Restore previous BUNDLE_GEMFILE in bundler/inline
-rw-r--r--lib/bundler/inline.rb67
-rw-r--r--spec/runtime/inline_spec.rb17
2 files changed, 53 insertions, 31 deletions
diff --git a/lib/bundler/inline.rb b/lib/bundler/inline.rb
index 152d7d3f60..5b2ddb7db6 100644
--- a/lib/bundler/inline.rb
+++ b/lib/bundler/inline.rb
@@ -37,43 +37,48 @@ def gemfile(install = false, options = {}, &gemfile)
ui.level = "silent" if opts.delete(:quiet)
raise ArgumentError, "Unknown options: #{opts.keys.join(", ")}" unless opts.empty?
- old_root = Bundler.method(:root)
- bundler_module = class << Bundler; self; end
- bundler_module.send(:remove_method, :root)
- def Bundler.root
- Bundler::SharedHelpers.pwd.expand_path
- end
- Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", "Gemfile"
-
- Bundler::Plugin.gemfile_install(&gemfile) if Bundler.feature_flag.plugins?
- builder = Bundler::Dsl.new
- builder.instance_eval(&gemfile)
+ begin
+ old_root = Bundler.method(:root)
+ bundler_module = class << Bundler; self; end
+ bundler_module.send(:remove_method, :root)
+ def Bundler.root
+ Bundler::SharedHelpers.pwd.expand_path
+ end
+ old_gemfile = ENV["BUNDLE_GEMFILE"]
+ Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", "Gemfile"
- Bundler.settings.temporary(:frozen => false) do
- definition = builder.to_definition(nil, true)
- def definition.lock(*); end
- definition.validate_runtime!
+ Bundler::Plugin.gemfile_install(&gemfile) if Bundler.feature_flag.plugins?
+ builder = Bundler::Dsl.new
+ builder.instance_eval(&gemfile)
- missing_specs = proc do
- definition.missing_specs?
- end
+ Bundler.settings.temporary(:frozen => false) do
+ definition = builder.to_definition(nil, true)
+ def definition.lock(*); end
+ definition.validate_runtime!
- Bundler.ui = install ? ui : Bundler::UI::Silent.new
- if install || missing_specs.call
- Bundler.settings.temporary(:inline => true, :disable_platform_warnings => true) do
- installer = Bundler::Installer.install(Bundler.root, definition, :system => true)
- installer.post_install_messages.each do |name, message|
- Bundler.ui.info "Post-install message from #{name}:\n#{message}"
+ Bundler.ui = install ? ui : Bundler::UI::Silent.new
+ if install || definition.missing_specs?
+ Bundler.settings.temporary(:inline => true, :disable_platform_warnings => true) do
+ installer = Bundler::Installer.install(Bundler.root, definition, :system => true)
+ installer.post_install_messages.each do |name, message|
+ Bundler.ui.info "Post-install message from #{name}:\n#{message}"
+ end
end
end
+
+ runtime = Bundler::Runtime.new(nil, definition)
+ runtime.setup.require
+ end
+ ensure
+ if bundler_module
+ bundler_module.send(:remove_method, :root)
+ bundler_module.send(:define_method, :root, old_root)
end
- runtime = Bundler::Runtime.new(nil, definition)
- runtime.setup.require
- end
-ensure
- if bundler_module
- bundler_module.send(:remove_method, :root)
- bundler_module.send(:define_method, :root, old_root)
+ if old_gemfile
+ ENV["BUNDLE_GEMFILE"] = old_gemfile
+ else
+ ENV.delete("BUNDLE_GEMFILE")
+ end
end
end
diff --git a/spec/runtime/inline_spec.rb b/spec/runtime/inline_spec.rb
index afb9c3d180..94d8b086a2 100644
--- a/spec/runtime/inline_spec.rb
+++ b/spec/runtime/inline_spec.rb
@@ -316,4 +316,21 @@ RSpec.describe "bundler/inline#gemfile" do
expect(err).to be_empty
end
+
+ it "preserves previous BUNDLE_GEMFILE value" do
+ ENV["BUNDLE_GEMFILE"] = ""
+ script <<-RUBY
+ gemfile do
+ source "#{file_uri_for(gem_repo1)}"
+ gem "rack"
+ end
+
+ puts "BUNDLE_GEMFILE is empty" if ENV["BUNDLE_GEMFILE"].empty?
+ system("#{Gem.ruby} -w -e '42'") # this should see original value of BUNDLE_GEMFILE
+ exit $?.exitstatus
+ RUBY
+
+ expect(last_command).to be_success
+ expect(out).to include("BUNDLE_GEMFILE is empty")
+ end
end