From a7fa4d5d9aab150ad4b0c3f3217fe444df69f527 Mon Sep 17 00:00:00 2001 From: drbrain Date: Tue, 19 Nov 2013 00:34:13 +0000 Subject: * lib/rubygems: Update to RubyGems master 6a3d9f9. Changes include: Compatibly renamed Gem::DependencyResolver to Gem::Resolver. Added support for git gems in gem.deps.rb and Gemfile. Fixed resolver bugs. * test/rubygems: ditto. * lib/rubygems/LICENSE.txt: Updated to license from RubyGems trunk. [ruby-trunk - Bug #9086] * lib/rubygems/commands/which_command.rb: RubyGems now indicates failure when any file is missing. [ruby-trunk - Bug #9004] * lib/rubygems/ext/builder: Extensions are now installed into the extension install directory and the first directory in the require path from the gem. This allows backwards compatibility with msgpack and other gems that calculate full require paths. [ruby-trunk - Bug #9106] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43714 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/rubygems/dependency_installer.rb | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) (limited to 'lib/rubygems/dependency_installer.rb') diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb index 22ff6f5cb7..e404d42b3a 100644 --- a/lib/rubygems/dependency_installer.rb +++ b/lib/rubygems/dependency_installer.rb @@ -1,6 +1,5 @@ require 'rubygems' require 'rubygems/dependency_list' -require 'rubygems/dependency_resolver' require 'rubygems/package' require 'rubygems/installer' require 'rubygems/spec_fetcher' @@ -196,7 +195,7 @@ class Gem::DependencyInstaller # sources. Gems are sorted with newer gems preferred over older gems, and # local gems preferred over remote gems. - def find_gems_with_sources dep # :nodoc: + def find_gems_with_sources dep, best_only=false # :nodoc: set = Gem::AvailableSet.new if consider_local? @@ -211,7 +210,26 @@ class Gem::DependencyInstaller if consider_remote? begin - found, errors = Gem::SpecFetcher.fetcher.spec_for_dependency dep + # TODO 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! { |a,b| b[0].version <=> a[0].version } + tuples = [tuples.first] + end + + specs = [] + tuples.each do |tup, source| + begin + spec = source.fetch_spec(tup) + rescue Gem::RemoteFetcher::FetchError => e + errors << Gem::SourceFetchProblem.new(source, e) + else + specs << [spec, source] + end + end if @errors @errors += errors @@ -219,7 +237,7 @@ class Gem::DependencyInstaller @errors = errors end - set << found + set << specs rescue Gem::RemoteFetcher::FetchError => e # FIX if there is a problem talking to the network, we either need to always tell @@ -271,7 +289,7 @@ class Gem::DependencyInstaller dep = Gem::Dependency.new gem_name, version dep.prerelease = true if prerelease - set = find_gems_with_sources(dep) + set = find_gems_with_sources(dep, true) set.match_platform! end @@ -402,7 +420,7 @@ class Gem::DependencyInstaller request_set = as.to_request_set install_development_deps request_set.soft_missing = @force - installer_set = Gem::DependencyResolver::InstallerSet.new @domain + installer_set = Gem::Resolver::InstallerSet.new @domain installer_set.always_install.concat request_set.always_install installer_set.ignore_installed = @only_install_dir @@ -411,7 +429,7 @@ class Gem::DependencyInstaller request_set.soft_missing = true end - composed_set = Gem::DependencyResolver.compose_sets as, installer_set + composed_set = Gem::Resolver.compose_sets as, installer_set request_set.resolve composed_set -- cgit v1.2.3