From d4315284e9382caf264e66ecf890f5a45d85c5e3 Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Mon, 21 Jan 2019 12:10:53 +0000 Subject: [PATCH] [rubygems/rubygems] Add bundle lock --update --bundler bundle lock --update can do everything that bundle update can do, but it doesn't actually install gems. This is especially useful for generating a lockfile on a machine that doesn't have the libraries available to be able to build native extensions. But, there was no parallel for bundle update --bundler. So let's add one. https://github.com/rubygems/rubygems/commit/7fc00bd2a5 --- lib/bundler/cli.rb | 2 ++ lib/bundler/cli/lock.rb | 7 +++++-- spec/bundler/commands/lock_spec.rb | 20 ++++++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/lib/bundler/cli.rb b/lib/bundler/cli.rb index c5edfadd37c186..18cef045a285f8 100644 --- a/lib/bundler/cli.rb +++ b/lib/bundler/cli.rb @@ -672,6 +672,8 @@ def inject(name, version) "If updating, do not allow any gem to be updated past latest --patch | --minor | --major" method_option "conservative", :type => :boolean, :banner => "If updating, use bundle install conservative update behavior and do not allow shared dependencies to be updated" + method_option "bundler", :type => :string, :lazy_default => "> 0.a", :banner => + "Update the locked version of bundler" def lock require_relative "cli/lock" Lock.new(options).run diff --git a/lib/bundler/cli/lock.rb b/lib/bundler/cli/lock.rb index cbd3f5a6fe3652..cb3ed27138745b 100644 --- a/lib/bundler/cli/lock.rb +++ b/lib/bundler/cli/lock.rb @@ -22,12 +22,15 @@ def run update = options[:update] conservative = options[:conservative] + bundler = options[:bundler] if update.is_a?(Array) # unlocking specific gems Bundler::CLI::Common.ensure_all_gems_in_lockfile!(update) update = { :gems => update, :conservative => conservative } - elsif update - update = { :conservative => conservative } if conservative + elsif update && conservative + update = { :conservative => conservative } + elsif update && bundler + update = { :bundler => bundler } end definition = Bundler.definition(update) diff --git a/spec/bundler/commands/lock_spec.rb b/spec/bundler/commands/lock_spec.rb index fd331d2f1b9281..ca4359177722d8 100644 --- a/spec/bundler/commands/lock_spec.rb +++ b/spec/bundler/commands/lock_spec.rb @@ -212,6 +212,26 @@ def read_lockfile(file = "Gemfile.lock") end end + it "updates the bundler version in the lockfile without re-resolving", :rubygems => ">= 3.3.0.dev" do + build_repo4 do + build_gem "rack", "1.0" + end + + install_gemfile <<-G + source "#{file_uri_for(gem_repo4)}" + gem "rack" + G + lockfile lockfile.sub(/(^\s*)#{Bundler::VERSION}($)/, '\11.0.0\2') + + FileUtils.rm_r gem_repo4 + + bundle "lock --update --bundler" + expect(the_bundle).to include_gem "rack 1.0" + + allow(Bundler::SharedHelpers).to receive(:find_gemfile).and_return(bundled_app_gemfile) + expect(the_bundle.locked_gems.bundler_version).to eq v(Bundler::VERSION) + end + it "supports adding new platforms" do bundle "lock --add-platform java x86-mingw32"