diff options
author | Samuel Giddins <segiddins@segiddins.me> | 2016-08-18 17:26:52 -0500 |
---|---|---|
committer | Samuel Giddins <segiddins@segiddins.me> | 2016-08-18 17:26:52 -0500 |
commit | 82d5938ad3c441eaa9cdc70b2b7148a4b2f59056 (patch) | |
tree | c2080fb7f6dee7f6863857d02597ef22f7d1e37c | |
parent | 54ff7a4fb827ec36d5cac2fac843993f28b19077 (diff) | |
download | bundler-seg-enable-trampoline-2.0.tar.gz |
[PostitTrampoline] Automatically enable when target version is >= 2seg-enable-trampoline-2.0
-rwxr-xr-x | exe/bundle | 10 | ||||
-rw-r--r-- | lib/bundler/postit_trampoline.rb | 19 | ||||
-rw-r--r-- | lib/bundler/setup.rb | 2 | ||||
-rw-r--r-- | spec/other/trampoline_spec.rb | 18 |
4 files changed, 35 insertions, 14 deletions
diff --git a/exe/bundle b/exe/bundle index 51a9035d97..ec88ea7552 100755 --- a/exe/bundle +++ b/exe/bundle @@ -4,12 +4,10 @@ # Exit cleanly from an early interrupt Signal.trap("INT") { exit 1 } -unless ENV["BUNDLE_DISABLE_POSTIT"] - update = "update".start_with?(ARGV.first || " ") && ARGV.find {|a| a.start_with?("--bundler") } - update &&= update =~ /--bundler(?:=(.+))?/ && $1 || "> 0.a" - ENV["BUNDLER_VERSION"] = update if update - require "bundler/postit_trampoline" -end +update = "update".start_with?(ARGV.first || " ") && ARGV.find {|a| a.start_with?("--bundler") } +update &&= update =~ /--bundler(?:=(.+))?/ && $1 || "> 0.a" +ENV["BUNDLER_VERSION"] = update if update +require "bundler/postit_trampoline" require "bundler" # Check if an older version of bundler is installed diff --git a/lib/bundler/postit_trampoline.rb b/lib/bundler/postit_trampoline.rb index dbb23aa4d9..2a22489954 100644 --- a/lib/bundler/postit_trampoline.rb +++ b/lib/bundler/postit_trampoline.rb @@ -1,13 +1,18 @@ # frozen_string_literal: true -if ENV["BUNDLE_ENABLE_TRAMPOLINE"] - module BundlerVendoredPostIt; end - require "bundler/vendor/postit/lib/postit" - require "rubygems" +module BundlerVendoredPostIt; end +require "bundler/vendor/postit/lib/postit" +require "rubygems" - environment = BundlerVendoredPostIt::PostIt::Environment.new([]) - version = Gem::Requirement.new(environment.bundler_version) +environment = BundlerVendoredPostIt::PostIt::Environment.new([]) +version = Gem::Requirement.new(environment.bundler_version) +if version.requirements.size == 1 && version.requirements.first.first == "=" # version.exact? + if version.requirements.first.last.segments.first >= 2 + ENV["BUNDLE_ENABLE_TRAMPOLINE"] = "true" + end +end +if ENV["BUNDLE_ENABLE_TRAMPOLINE"] && !ENV["BUNDLE_DISABLE_POSTIT"] installed_version = if defined?(Bundler::VERSION) Bundler::VERSION @@ -65,4 +70,4 @@ You're running Bundler #{installed_version} but this project uses #{running_vers abort "The running bundler (#{running_version}) does not match the required `#{version}`" end -end # unless ENV["BUNDLE_ENABLE_TRAMPOLINE"] +end # if ENV["BUNDLE_ENABLE_TRAMPOLINE"] && !ENV["BUNDLE_DISABLE_POSTIT"] diff --git a/lib/bundler/setup.rb b/lib/bundler/setup.rb index 8b4b479778..4e213beed3 100644 --- a/lib/bundler/setup.rb +++ b/lib/bundler/setup.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require "bundler/postit_trampoline" unless ENV["BUNDLE_DISABLE_POSTIT"] +require "bundler/postit_trampoline" require "bundler/shared_helpers" if Bundler::SharedHelpers.in_bundle? diff --git a/spec/other/trampoline_spec.rb b/spec/other/trampoline_spec.rb index 2aac0a2c1d..9a8e0a4a5d 100644 --- a/spec/other/trampoline_spec.rb +++ b/spec/other/trampoline_spec.rb @@ -59,6 +59,24 @@ describe "bundler version trampolining" do end end + context "without BUNDLE_ENABLE_TRAMPOLINE" do + before { ENV["BUNDLE_ENABLE_TRAMPOLINE"] = nil } + + context "when the version is >= 2" do + let(:version) { "2.7182818285" } + before do + simulate_bundler_version version do + install_gemfile! "" + end + end + + it "trampolines automatically", :realworld => true do + bundle "--version" + expect(err).to include("Installing locked Bundler version #{version}...") + end + end + end + context "installing missing bundler versions", :realworld => true do before do ENV["BUNDLER_VERSION"] = "1.12.3" |