summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2019-01-21 12:10:53 +0000
committergit <svn-admin@ruby-lang.org>2022-12-18 19:17:42 +0000
commitd4315284e9382caf264e66ecf890f5a45d85c5e3 (patch)
treeaac7258c7c31b33e04ab2bfa4f37db0d591cbddb
parentede7c035d58a3384b684051647aa56f258ecc286 (diff)
downloadruby-d4315284e9382caf264e66ecf890f5a45d85c5e3.tar.gz
[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
-rw-r--r--lib/bundler/cli.rb2
-rw-r--r--lib/bundler/cli/lock.rb7
-rw-r--r--spec/bundler/commands/lock_spec.rb20
3 files changed, 27 insertions, 2 deletions
diff --git a/lib/bundler/cli.rb b/lib/bundler/cli.rb
index c5edfadd37..18cef045a2 100644
--- a/lib/bundler/cli.rb
+++ b/lib/bundler/cli.rb
@@ -672,6 +672,8 @@ module Bundler
"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 cbd3f5a6fe..cb3ed27138 100644
--- a/lib/bundler/cli/lock.rb
+++ b/lib/bundler/cli/lock.rb
@@ -22,12 +22,15 @@ module Bundler
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 fd331d2f1b..ca43591777 100644
--- a/spec/bundler/commands/lock_spec.rb
+++ b/spec/bundler/commands/lock_spec.rb
@@ -212,6 +212,26 @@ RSpec.describe "bundle lock" do
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"