diff options
author | Josef Šimánek <josef.simanek@gmail.com> | 2020-06-14 00:26:23 +0200 |
---|---|---|
committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2020-06-15 21:20:37 +0900 |
commit | 3ab1cfc325811b862cb81d0360bf83216cd6f235 (patch) | |
tree | d2a28c09fa9c70fbba90a9cd62cde5fa10629305 | |
parent | 49c42b6012264890bedb572e5e0c6fc4750aaf9a (diff) | |
download | ruby-3ab1cfc325811b862cb81d0360bf83216cd6f235.tar.gz |
Add Gem.disable_system_update_message to disable gem update --system if needed.
-rw-r--r-- | lib/rubygems.rb | 6 | ||||
-rw-r--r-- | lib/rubygems/commands/update_command.rb | 5 | ||||
-rw-r--r-- | test/rubygems/test_gem_commands_update_command.rb | 17 |
3 files changed, 28 insertions, 0 deletions
diff --git a/lib/rubygems.rb b/lib/rubygems.rb index c018492150..d24c07d55a 100644 --- a/lib/rubygems.rb +++ b/lib/rubygems.rb @@ -1188,6 +1188,12 @@ An Array (#{env.inspect}) was passed in from #{caller[3]} class << self ## + # RubyGems distributors (like operating system package managers) can + # disable RubyGems update by setting this to error message printed to + # end-users on gem update --system instead of actual update. + attr_accessor :disable_system_update_message + + ## # Hash of loaded Gem::Specification keyed by name attr_reader :loaded_specs diff --git a/lib/rubygems/commands/update_command.rb b/lib/rubygems/commands/update_command.rb index ca407ee33e..052d9f9245 100644 --- a/lib/rubygems/commands/update_command.rb +++ b/lib/rubygems/commands/update_command.rb @@ -262,6 +262,11 @@ command to remove old versions. # Update RubyGems software to the latest version. def update_rubygems + if Gem.disable_system_update_message + alert_error Gem.disable_system_update_message + return + end + check_update_arguments version, requirement = rubygems_target_version diff --git a/test/rubygems/test_gem_commands_update_command.rb b/test/rubygems/test_gem_commands_update_command.rb index efaa621634..3b823a047f 100644 --- a/test/rubygems/test_gem_commands_update_command.rb +++ b/test/rubygems/test_gem_commands_update_command.rb @@ -238,6 +238,23 @@ class TestGemCommandsUpdateCommand < Gem::TestCase @ui.error end + def test_execute_system_with_disabled_update + old_disable_system_update_message = Gem.disable_system_update_message + Gem.disable_system_update_message = "Please use package manager instead." + + @cmd.options[:args] = [] + @cmd.options[:system] = true + + use_ui @ui do + @cmd.execute + end + + assert_empty @ui.output + assert_equal "ERROR: Please use package manager instead.\n", @ui.error + ensure + Gem.disable_system_update_message = old_disable_system_update_message + end + # before: # a1 -> c1.2 # after: |