diff options
-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: |