diff options
author | David RodrÃguez <deivid.rodriguez@riseup.net> | 2023-10-05 11:55:14 +0200 |
---|---|---|
committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2023-10-16 13:52:12 +0900 |
commit | a05904c8cefdf16feb164240f8aff0f83d43e75a (patch) | |
tree | 543a3976019e5e95b455510641359a23b87538fd /lib/bundler/cli | |
parent | 4dbee36f84952d7a237a2fdd8fd8d3e2823692df (diff) |
[rubygems/rubygems] The `lock` command should not be affected by frozen setting
The `lock` command is specifically designed to manage the lockfile, so
running it should take precedence over any "frozen" setting.
Besides that, "frozen" is not specifically designed as "lockfile cannot
be updated" but as "installation of gems should be prevented if gemfile
is not in sync with the lockfile".
The lock command does not install any gems and preserves the property of
the lockfile being in sycn with its gemfile, so I think frozen should
not influence it.
The current behavior is quite confusing when frozen is set. On an app
where rubocop can get lockfile updates
```
$ bundle lock --update rubocop
Writing lockfile to /path/to/Gemfile.lock
```
Completely silent, it makes you think that it has written the lockfile,
but still no updates.
In verbose mode, it gives a bit more information, but still confusing
and unexpected, and does not change the lockfile:
```
$ bundle lock --update rubocop --verbose
Running `bundle lock --update "rubocop" --verbose` with bundler 2.4.20
Frozen, using resolution from the lockfile
Writing lockfile to /path/to/Gemfile.lock
```
With this commit, it updates the lockfile as expected.
https://github.com/rubygems/rubygems/commit/1d501ae8ea
Diffstat (limited to 'lib/bundler/cli')
-rw-r--r-- | lib/bundler/cli/lock.rb | 49 |
1 files changed, 26 insertions, 23 deletions
diff --git a/lib/bundler/cli/lock.rb b/lib/bundler/cli/lock.rb index e23bef1990..a03a5bae35 100644 --- a/lib/bundler/cli/lock.rb +++ b/lib/bundler/cli/lock.rb @@ -32,36 +32,39 @@ module Bundler elsif update && bundler update = { :bundler => bundler } end - definition = Bundler.definition(update) - Bundler::CLI::Common.configure_gem_version_promoter(definition, options) if options[:update] + Bundler.settings.temporary(:frozen => false) do + definition = Bundler.definition(update) - options["remove-platform"].each do |platform| - definition.remove_platform(platform) - end + Bundler::CLI::Common.configure_gem_version_promoter(definition, options) if options[:update] - options["add-platform"].each do |platform_string| - platform = Gem::Platform.new(platform_string) - if platform.to_s == "unknown" - Bundler.ui.warn "The platform `#{platform_string}` is unknown to RubyGems " \ - "and adding it will likely lead to resolution errors" + options["remove-platform"].each do |platform| + definition.remove_platform(platform) end - definition.add_platform(platform) - end - if definition.platforms.empty? - raise InvalidOption, "Removing all platforms from the bundle is not allowed" - end + options["add-platform"].each do |platform_string| + platform = Gem::Platform.new(platform_string) + if platform.to_s == "unknown" + Bundler.ui.warn "The platform `#{platform_string}` is unknown to RubyGems " \ + "and adding it will likely lead to resolution errors" + end + definition.add_platform(platform) + end - definition.resolve_remotely! unless options[:local] + if definition.platforms.empty? + raise InvalidOption, "Removing all platforms from the bundle is not allowed" + end + + definition.resolve_remotely! unless options[:local] - if print - puts definition.to_lock - else - file = options[:lockfile] - file = file ? File.expand_path(file) : Bundler.default_lockfile - puts "Writing lockfile to #{file}" - definition.lock(file) + if print + puts definition.to_lock + else + file = options[:lockfile] + file = file ? File.expand_path(file) : Bundler.default_lockfile + puts "Writing lockfile to #{file}" + definition.lock(file) + end end Bundler.ui.level = previous_ui_level |