summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Giddins <segiddins@segiddins.me>2016-08-18 17:26:52 -0500
committerSamuel Giddins <segiddins@segiddins.me>2016-08-18 17:26:52 -0500
commit82d5938ad3c441eaa9cdc70b2b7148a4b2f59056 (patch)
treec2080fb7f6dee7f6863857d02597ef22f7d1e37c
parent54ff7a4fb827ec36d5cac2fac843993f28b19077 (diff)
downloadbundler-seg-enable-trampoline-2.0.tar.gz
[PostitTrampoline] Automatically enable when target version is >= 2seg-enable-trampoline-2.0
-rwxr-xr-xexe/bundle10
-rw-r--r--lib/bundler/postit_trampoline.rb19
-rw-r--r--lib/bundler/setup.rb2
-rw-r--r--spec/other/trampoline_spec.rb18
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"