class Gem::DependencyInstaller
def find_gems_with_sources(dep, best_only=false) # :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