Skip to content

Commit

Permalink
[rubygems/rubygems] Add bundle lock --update --bundler
Browse files Browse the repository at this point in the history
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.

rubygems/rubygems@7fc00bd2a5
  • Loading branch information
alyssais authored and matzbot committed Dec 18, 2022
1 parent ede7c03 commit d431528
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 2 deletions.
2 changes: 2 additions & 0 deletions lib/bundler/cli.rb
Expand Up @@ -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
Expand Down
7 changes: 5 additions & 2 deletions lib/bundler/cli/lock.rb
Expand Up @@ -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)

Expand Down
20 changes: 20 additions & 0 deletions spec/bundler/commands/lock_spec.rb
Expand Up @@ -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"

Expand Down

0 comments on commit d431528

Please sign in to comment.