summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Giddins <segiddins@segiddins.me>2016-07-27 13:59:44 -0500
committerSamuel Giddins <segiddins@segiddins.me>2016-07-27 14:00:16 -0500
commita2fc99ef378babb1ae2f98876820a78589f94531 (patch)
tree486c435f0c27d575ad7e7448bd8e5acd29f075d2
parent6904ac6872be56290b12088a6595480de2ae9c53 (diff)
downloadbundler-seg-feature-flag-trampoline.tar.gz
Feature-flag the postit trampoline, disabled by defaultseg-feature-flag-trampoline
Set ENV["BUNDLE_ENABLE_TRAMPOLINE"] to enable it
-rw-r--r--lib/bundler/postit_trampoline.rb97
-rw-r--r--spec/other/trampoline_spec.rb1
2 files changed, 51 insertions, 47 deletions
diff --git a/lib/bundler/postit_trampoline.rb b/lib/bundler/postit_trampoline.rb
index 010293ea3c..5f90ffa0a0 100644
--- a/lib/bundler/postit_trampoline.rb
+++ b/lib/bundler/postit_trampoline.rb
@@ -1,62 +1,65 @@
# 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)
-installed_version =
- if defined?(Bundler::VERSION)
- Bundler::VERSION
- else
- File.read(File.expand_path("../version.rb", __FILE__)) =~ /VERSION = "(.+)"/
- $1
- end
-installed_version &&= Gem::Version.new(installed_version)
-
-if !version.satisfied_by?(installed_version)
- begin
- installer = BundlerVendoredPostIt::PostIt::Installer.new(version)
- installer.install!
- rescue => e
- abort <<-EOS.strip
+ installed_version =
+ if defined?(Bundler::VERSION)
+ Bundler::VERSION
+ else
+ File.read(File.expand_path("../version.rb", __FILE__)) =~ /VERSION = "(.+)"/
+ $1
+ end
+ installed_version &&= Gem::Version.new(installed_version)
+
+ if !version.satisfied_by?(installed_version)
+ begin
+ installer = BundlerVendoredPostIt::PostIt::Installer.new(version)
+ installer.install!
+ rescue => e
+ abort <<-EOS.strip
Installing the inferred bundler version (#{version}) failed.
If you'd like to update to the current bundler version (#{installed_version}) in this project, run `bundle update --bundler`.
The error was: #{e}
EOS
- end
+ end
- if deleted_spec = Gem.loaded_specs.delete("bundler")
- deleted_spec.full_require_paths.each {|path| $:.delete(path) }
+ if deleted_spec = Gem.loaded_specs.delete("bundler")
+ deleted_spec.full_require_paths.each {|path| $:.delete(path) }
+ else
+ $:.delete(File.expand_path("../..", __FILE__))
+ end
+ gem "bundler", version
else
- $:.delete(File.expand_path("../..", __FILE__))
+ begin
+ gem "bundler", version
+ rescue LoadError
+ $:.unshift(File.expand_path("../..", __FILE__))
+ end
end
- gem "bundler", version
-else
- begin
- gem "bundler", version
- rescue LoadError
- $:.unshift(File.expand_path("../..", __FILE__))
+
+ running_version = begin
+ require "bundler/version"
+ Bundler::VERSION
+ rescue LoadError, NameError
+ nil
end
-end
-
-running_version = begin
- require "bundler/version"
- Bundler::VERSION
-rescue LoadError, NameError
- nil
-end
-
-if Gem::Requirement.new(">= 1.13.pre".dup).satisfied_by?(Gem::Version.new(running_version))
- ENV["BUNDLE_POSTIT_TRAMPOLINING_VERSION"] = installed_version.to_s
-elsif ARGV.empty? || ARGV.any? {|a| %w(install i).include? a }
- puts <<-WARN.strip
+
+ if Gem::Requirement.new(">= 1.13.pre".dup).satisfied_by?(Gem::Version.new(running_version))
+ ENV["BUNDLE_POSTIT_TRAMPOLINING_VERSION"] = installed_version.to_s
+ elsif ARGV.empty? || ARGV.any? {|a| %w(install i).include? a }
+ puts <<-WARN.strip
You're running Bundler #{installed_version} but this project uses #{running_version}. To update, run `bundle update --bundler`.
WARN
-end
+ end
+
+ if !Gem::Version.correct?(running_version.to_s) || !version.satisfied_by?(Gem::Version.create(running_version))
+ abort "The running bundler (#{running_version}) does not match the required `#{version}`"
+ end
-if !Gem::Version.correct?(running_version.to_s) || !version.satisfied_by?(Gem::Version.create(running_version))
- abort "The running bundler (#{running_version}) does not match the required `#{version}`"
-end
+end # unless ENV["BUNDLE_ENABLE_TRAMPOLINE"]
diff --git a/spec/other/trampoline_spec.rb b/spec/other/trampoline_spec.rb
index a498e1219e..98cd5c5afe 100644
--- a/spec/other/trampoline_spec.rb
+++ b/spec/other/trampoline_spec.rb
@@ -4,6 +4,7 @@ require "spec_helper"
describe "bundler version trampolining" do
before do
ENV["BUNDLE_DISABLE_POSTIT"] = nil
+ ENV["BUNDLE_ENABLE_TRAMPOLINE"] = "true"
FileUtils.rm_rf(system_gem_path)
FileUtils.cp_r(base_system_gems, system_gem_path)
end