summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/rubygems/commands/sources_command.rb6
-rw-r--r--test/rubygems/test_gem_commands_sources_command.rb26
2 files changed, 30 insertions, 2 deletions
diff --git a/lib/rubygems/commands/sources_command.rb b/lib/rubygems/commands/sources_command.rb
index a86d8d5014..8f809e9402 100644
--- a/lib/rubygems/commands/sources_command.rb
+++ b/lib/rubygems/commands/sources_command.rb
@@ -202,8 +202,10 @@ To remove a source use the --remove argument:
end
def remove_source(source_uri) # :nodoc:
- if Gem.sources.include? source_uri
- Gem.sources.delete source_uri
+ source = Gem::Source.new source_uri
+
+ if Gem.sources.include? source
+ Gem.sources.delete source
Gem.configuration.write
say "#{source_uri} removed from sources"
diff --git a/test/rubygems/test_gem_commands_sources_command.rb b/test/rubygems/test_gem_commands_sources_command.rb
index 973ad9cfa9..45cb0662f8 100644
--- a/test/rubygems/test_gem_commands_sources_command.rb
+++ b/test/rubygems/test_gem_commands_sources_command.rb
@@ -428,6 +428,32 @@ beta-gems.example.com is not a URI
assert_equal "", @ui.error
end
+ def test_execute_remove_redundant_source_trailing_slash
+ repo_with_slash = "http://sample.repo/"
+
+ Gem.configuration.sources = [repo_with_slash]
+
+ setup_fake_source(repo_with_slash)
+
+ repo_without_slash = repo_with_slash.delete_suffix("/")
+
+ @cmd.handle_options %W[--remove #{repo_without_slash}]
+ use_ui @ui do
+ @cmd.execute
+ end
+ source = Gem::Source.new repo_without_slash
+ assert_equal false, Gem.sources.include?(source)
+
+ expected = <<-EOF
+#{repo_without_slash} removed from sources
+ EOF
+
+ assert_equal expected, @ui.output
+ assert_equal "", @ui.error
+ ensure
+ Gem.configuration.sources = nil
+ end
+
def test_execute_update
@cmd.handle_options %w[--update]