# File lib/rubygems/commands/sources_command.rb, line 30
      def execute
        options[:list] = ! (options[:add] || options[:remove] || options[:clear_all]) 

        if options[:clear_all] then
          remove_cache_file("user", Gem::SourceInfoCache.user_cache_file)
          remove_cache_file("system", Gem::SourceInfoCache.system_cache_file)
        end

        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] then
          say "*** CURRENT SOURCES ***"
          say

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