class Gem::DependencyInstaller

def find_gems_with_sources(dep, best_only=false) # :nodoc:

:nodoc:
def find_gems_with_sources(dep, best_only=false) # :nodoc:
  set = Gem::AvailableSet.new
  if consider_local?
    sl = Gem::Source::Local.new
    if spec = sl.find_gem(dep.name)
      if dep.matches_spec? spec
        set.add spec, sl
      end
    end
  end
  if consider_remote?
    begin
      # This is pulled from #spec_for_dependency to allow
      # us to filter tuples before fetching specs.
      tuples, errors = Gem::SpecFetcher.fetcher.search_for_dependency dep
      if best_only && !tuples.empty?
        tuples.sort! do |a,b|
          if b[0].version == a[0].version
            if b[0].platform != Gem::Platform::RUBY
              1
            else
              -1
            end
          else
            b[0].version <=> a[0].version
          end
        end
        tuples = [tuples.first]
      end
      specs = []
      tuples.each do |tup, source|
        spec = source.fetch_spec(tup)
      rescue Gem::RemoteFetcher::FetchError => e
        errors << Gem::SourceFetchProblem.new(source, e)
      else
        specs << [spec, source]
      end
      if @errors
        @errors += errors
      else
        @errors = errors
      end
      set << specs
    rescue Gem::RemoteFetcher::FetchError => e
      # FIX if there is a problem talking to the network, we either need to always tell
      # the user (no really_verbose) or fail hard, not silently tell them that we just
      # couldn't find their requested gem.
      verbose do
        "Error fetching remote data:\t\t#{e.message}\n" \
          "Falling back to local-only install"
      end
      @domain = :local
    end
  end
  set
end