diff options
author | The Bundler Bot <bot@bundler.io> | 2017-06-16 16:25:51 +0000 |
---|---|---|
committer | The Bundler Bot <bot@bundler.io> | 2017-06-16 16:25:51 +0000 |
commit | d4a06723f2552f55bc46b395ab1cc0070b438b7e (patch) | |
tree | eaa91b06ed2481366adaa8882f1407b892a887d5 | |
parent | 0c651a97a8edff5be1a4a00e0c1f240dcf000137 (diff) | |
parent | 5f6a5b3766d9d0b7ad519e68b10eeb08541283e5 (diff) | |
download | bundler-d4a06723f2552f55bc46b395ab1cc0070b438b7e.tar.gz |
Auto merge of #5719 - bundler:seg-prefer-gems-rb, r=indirect
[2.0] Add a feature flag to prefer gems.rb to Gemfile
With `prefer_gems_rb` set (by default on 2.0), Bundler will prefer a `gems.rb` that is in the same directory as a `Gemfile`
-rw-r--r-- | lib/bundler.rb | 2 | ||||
-rw-r--r-- | lib/bundler/feature_flag.rb | 1 | ||||
-rw-r--r-- | lib/bundler/settings.rb | 1 | ||||
-rw-r--r-- | lib/bundler/shared_helpers.rb | 22 | ||||
-rw-r--r-- | man/bundle-config.ronn | 6 | ||||
-rw-r--r-- | spec/bundler/definition_spec.rb | 2 | ||||
-rw-r--r-- | spec/install/gemfile_spec.rb | 16 |
7 files changed, 41 insertions, 9 deletions
diff --git a/lib/bundler.rb b/lib/bundler.rb index 9bcadc381f..c6d68c49de 100644 --- a/lib/bundler.rb +++ b/lib/bundler.rb @@ -207,7 +207,7 @@ module Bundler def root @root ||= begin - default_gemfile.dirname.expand_path + SharedHelpers.root rescue GemfileNotFound bundle_dir = default_bundle_dir raise GemfileNotFound, "Could not locate Gemfile or .bundle/ directory" unless bundle_dir diff --git a/lib/bundler/feature_flag.rb b/lib/bundler/feature_flag.rb index f472ba2b7b..34fddb1ecc 100644 --- a/lib/bundler/feature_flag.rb +++ b/lib/bundler/feature_flag.rb @@ -19,6 +19,7 @@ module Bundler settings_flag(:init_gems_rb) { bundler_2_mode? } settings_flag(:only_update_to_newer_versions) { bundler_2_mode? } settings_flag(:plugins) { @bundler_version >= Gem::Version.new("1.14") } + settings_flag(:prefer_gems_rb) { bundler_2_mode? } settings_flag(:update_requires_all_flag) { bundler_2_mode? } def initialize(bundler_version) diff --git a/lib/bundler/settings.rb b/lib/bundler/settings.rb index 34747cbed7..9f4d5b30a0 100644 --- a/lib/bundler/settings.rb +++ b/lib/bundler/settings.rb @@ -28,6 +28,7 @@ module Bundler no_prune only_update_to_newer_versions plugins + prefer_gems_rb silence_root_warning update_requires_all_flag ].freeze diff --git a/lib/bundler/shared_helpers.rb b/lib/bundler/shared_helpers.rb index 593d2c1e06..39f0423f7f 100644 --- a/lib/bundler/shared_helpers.rb +++ b/lib/bundler/shared_helpers.rb @@ -19,9 +19,15 @@ end module Bundler module SharedHelpers - def default_gemfile + def root gemfile = find_gemfile raise GemfileNotFound, "Could not locate Gemfile" unless gemfile + Pathname.new(gemfile).untaint.expand_path.parent + end + + def default_gemfile + gemfile = find_gemfile(:order_matters) + raise GemfileNotFound, "Could not locate Gemfile" unless gemfile Pathname.new(gemfile).untaint end @@ -137,7 +143,7 @@ module Bundler end def print_major_deprecations! - deprecate_gemfile(find_gemfile) if find_gemfile == find_file("Gemfile") + deprecate_gemfile(find_gemfile) if find_gemfile(:order_matters) == find_file("Gemfile") if RUBY_VERSION < "2" major_deprecation("Bundler will only support ruby >= 2.0, you are running #{RUBY_VERSION}") end @@ -172,10 +178,16 @@ module Bundler private - def find_gemfile + def find_gemfile(order_matters = false) given = ENV["BUNDLE_GEMFILE"] return given if given && !given.empty? - find_file("Gemfile", "gems.rb") + names = gemfile_names + names.reverse! if order_matters && Bundler.feature_flag.prefer_gems_rb? + find_file(*names) + end + + def gemfile_names + ["Gemfile", "gems.rb"] end def find_file(*names) @@ -228,7 +240,7 @@ module Bundler end # Set BUNDLE_GEMFILE - Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", find_gemfile.to_s + Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", find_gemfile(:order_matters).to_s Bundler::SharedHelpers.set_env "BUNDLER_VERSION", Bundler::VERSION end diff --git a/man/bundle-config.ronn b/man/bundle-config.ronn index d387350f8b..4fa0025815 100644 --- a/man/bundle-config.ronn +++ b/man/bundle-config.ronn @@ -223,9 +223,11 @@ learn more about their operation in [bundle install(1)][bundle-install]. Sets the `--key` parameter for `gem push` when using the `rake release` command with a private gemstash server. * `error_on_stderr` (`BUNDLE_ERROR_ON_STDERR`) - Print Bundler errors to stderr + Print Bundler errors to stderr. * `init_gems_rb` (`BUNDLE_NEW_GEMFILE_NAME`) - generate a new gems.rb on `bundle init` instead of the `Gemfile` + Generate a `gems.rb` instead of a `Gemfile` when running `bundle init`. +* `prefer_gems_rb` (`BUNDLE_PREFER_GEMS_RB`) + Prefer `gems.rb` to `Gemfile` when Bundler is searching for a Gemfile. * `update_requires_all_flag` (`BUNDLE_UPDATE_REQUIRES_ALL_FLAG`) Require passing `--all` to `bundle update` when everything should be updated, and disallow passing no options to `bundle update`. diff --git a/spec/bundler/definition_spec.rb b/spec/bundler/definition_spec.rb index 4e93d5e01c..cb642da9f7 100644 --- a/spec/bundler/definition_spec.rb +++ b/spec/bundler/definition_spec.rb @@ -5,7 +5,7 @@ RSpec.describe Bundler::Definition do describe "#lock" do before do allow(Bundler).to receive(:settings) { Bundler::Settings.new(".") } - allow(Bundler).to receive(:default_gemfile) { Pathname.new("Gemfile") } + allow(Bundler::SharedHelpers).to receive(:find_gemfile) { Pathname.new("Gemfile") } allow(Bundler).to receive(:ui) { double("UI", :info => "", :debug => "") } end context "when it's not possible to write to the file" do diff --git a/spec/install/gemfile_spec.rb b/spec/install/gemfile_spec.rb index 9262dcc92d..d1b1f1e6b8 100644 --- a/spec/install/gemfile_spec.rb +++ b/spec/install/gemfile_spec.rb @@ -66,6 +66,22 @@ RSpec.describe "bundle install" do end end + context "with prefer_gems_rb set" do + before { bundle! "config prefer_gems_rb true" } + + it "prefers gems.rb to Gemfile" do + create_file("gems.rb", "gem 'bundler'") + create_file("Gemfile", "raise 'wrong Gemfile!'") + + bundle! :install + + expect(bundled_app("gems.rb")).to be_file + expect(bundled_app("Gemfile.lock")).not_to be_file + + expect(the_bundle).to include_gem "bundler #{Bundler::VERSION}" + end + end + context "with engine specified in symbol" do it "does not raise any error parsing Gemfile" do simulate_ruby_version "2.3.0" do |