Skip to content

Commit ef78de5

Browse files
Warn when trying to remove a default source that's the only configured sources
1 parent 2bae554 commit ef78de5

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

lib/rubygems/commands/sources_command.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,11 @@ def remove_source(source_uri) # :nodoc:
208208
Gem.sources.delete source
209209
Gem.configuration.write
210210

211-
say "#{source_uri} removed from sources"
211+
if default_sources.include?(source) && configured_sources.one?
212+
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."
213+
else
214+
say "#{source_uri} removed from sources"
215+
end
212216
elsif configured_sources
213217
say "source #{source_uri} cannot be removed because it's not present in #{config_file_name}"
214218
else
@@ -239,6 +243,10 @@ def remove_cache_file(desc, path) # :nodoc:
239243

240244
private
241245

246+
def default_sources
247+
Gem::SourceList.from(Gem.default_sources)
248+
end
249+
242250
def configured_sources
243251
return @configured_sources if defined?(@configured_sources)
244252

test/rubygems/test_gem_commands_sources_command.rb

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,40 @@ def test_execute_remove_nothing_configured
455455
assert_equal "", @ui.error
456456
end
457457

458+
def test_remove_default_also_present_in_configuration
459+
Gem.configuration.sources = [@gem_repo]
460+
461+
@cmd.handle_options %W[--remove #{@gem_repo}]
462+
463+
use_ui @ui do
464+
@cmd.execute
465+
end
466+
467+
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"
468+
469+
assert_equal "", @ui.output
470+
assert_equal expected, @ui.error
471+
ensure
472+
Gem.configuration.sources = nil
473+
end
474+
475+
def test_remove_default_also_present_in_configuration_when_there_are_more_configured_sources
476+
Gem.configuration.sources = [@gem_repo, "https://other.repo"]
477+
478+
@cmd.handle_options %W[--remove #{@gem_repo}]
479+
480+
use_ui @ui do
481+
@cmd.execute
482+
end
483+
484+
expected = "#{@gem_repo} removed from sources\n"
485+
486+
assert_equal expected, @ui.output
487+
assert_equal "", @ui.error
488+
ensure
489+
Gem.configuration.sources = nil
490+
end
491+
458492
def test_execute_remove_redundant_source_trailing_slash
459493
repo_with_slash = "http://sample.repo/"
460494

0 commit comments

Comments
 (0)