summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/rubygems.rb6
-rw-r--r--lib/rubygems/commands/update_command.rb5
-rw-r--r--test/rubygems/test_gem_commands_update_command.rb17
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: