# File lib/rubygems/gem_commands.rb, line 375
    def execute
      if options[:add] then
        source_uri = options[:add]

        sice = Gem::SourceInfoCacheEntry.new nil, nil
        begin
          sice.refresh source_uri
        rescue ArgumentError
          say "#{source_uri} is not a URI"
        rescue Gem::RemoteFetcher::FetchError => e
          say "Error fetching #{source_uri}:\n\t#{e.message}"
        else
          Gem::SourceInfoCache.cache_data[source_uri] = sice
          Gem::SourceInfoCache.cache.update
          Gem::SourceInfoCache.cache.flush

          say "#{source_uri} added to sources"
        end
      end

      if options[:remove] then
        source_uri = options[:remove]

        unless Gem::SourceInfoCache.cache_data.include? source_uri then
          say "source #{source_uri} not present in cache"
        else
          Gem::SourceInfoCache.cache_data.delete source_uri
          Gem::SourceInfoCache.cache.update
          Gem::SourceInfoCache.cache.flush
          say "#{source_uri} removed from sources"
        end
      end

      if options[:list] or not (options[:add] or options[:remove]) then
        say "*** CURRENT SOURCES ***"
        say

        Gem::SourceInfoCache.cache_data.keys.each do |source_uri|
          say source_uri
        end
      end
    end