summaryrefslogtreecommitdiff
path: root/lib/bundler/inline.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bundler/inline.rb')
-rw-r--r--lib/bundler/inline.rb67
1 files changed, 36 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