summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/rubygems/commands/sources_command.rb10
-rw-r--r--test/rubygems/test_gem_commands_sources_command.rb34
2 files changed, 43 insertions, 1 deletions
diff --git a/lib/rubygems/commands/sources_command.rb b/lib/rubygems/commands/sources_command.rb
index c878333b14..9e2f156da3 100644
--- a/lib/rubygems/commands/sources_command.rb
+++ b/lib/rubygems/commands/sources_command.rb
@@ -208,7 +208,11 @@ To remove a source use the --remove argument:
Gem.sources.delete source
Gem.configuration.write
- say "#{source_uri} removed from sources"
+ if default_sources.include?(source) && configured_sources.one?
+ alert_warning "Removing a default source when it is the only source has no effect. Add a different source to #{config_file_name} if you want to stop using it as a source."
+ else
+ say "#{source_uri} removed from sources"
+ end
elsif configured_sources
say "source #{source_uri} cannot be removed because it's not present in #{config_file_name}"
else
@@ -239,6 +243,10 @@ To remove a source use the --remove argument:
private
+ def default_sources
+ Gem::SourceList.from(Gem.default_sources)
+ end
+
def configured_sources
return @configured_sources if defined?(@configured_sources)
diff --git a/test/rubygems/test_gem_commands_sources_command.rb b/test/rubygems/test_gem_commands_sources_command.rb
index 9f0adf5104..e004123c90 100644
--- a/test/rubygems/test_gem_commands_sources_command.rb
+++ b/test/rubygems/test_gem_commands_sources_command.rb
@@ -455,6 +455,40 @@ beta-gems.example.com is not a URI
assert_equal "", @ui.error
end
+ def test_remove_default_also_present_in_configuration
+ Gem.configuration.sources = [@gem_repo]
+
+ @cmd.handle_options %W[--remove #{@gem_repo}]
+
+ use_ui @ui do
+ @cmd.execute
+ end
+
+ expected = "WARNING: Removing a default source when it is the only source has no effect. Add a different source to #{Gem.configuration.config_file_name} if you want to stop using it as a source.\n"
+
+ assert_equal "", @ui.output
+ assert_equal expected, @ui.error
+ ensure
+ Gem.configuration.sources = nil
+ end
+
+ def test_remove_default_also_present_in_configuration_when_there_are_more_configured_sources
+ Gem.configuration.sources = [@gem_repo, "https://other.repo"]
+
+ @cmd.handle_options %W[--remove #{@gem_repo}]
+
+ use_ui @ui do
+ @cmd.execute
+ end
+
+ expected = "#{@gem_repo} removed from sources\n"
+
+ assert_equal expected, @ui.output
+ assert_equal "", @ui.error
+ ensure
+ Gem.configuration.sources = nil
+ end
+
def test_execute_remove_redundant_source_trailing_slash
repo_with_slash = "http://sample.repo/"