diff options
-rw-r--r-- | lib/rubygems/resolver.rb | 65 |
1 files changed, 49 insertions, 16 deletions
@@ -1,4 +1,3 @@ -require 'rubygems' require 'rubygems/dependency' require 'rubygems/exceptions' require 'rubygems/util/list' @@ -21,17 +20,24 @@ class Gem::Resolver DEBUG_RESOLVER = !ENV['DEBUG_RESOLVER'].nil? ## # Contains all the conflicts encountered while doing resolution attr_reader :conflicts ## - # Set to true if development dependencies should be considered. attr_accessor :development ## # When true, no dependencies are looked up for requested gems. attr_accessor :ignore_dependencies @@ -44,6 +50,12 @@ class Gem::Resolver attr_reader :stats ## # When a missing dependency, don't stop. Just go on and record what was # missing. @@ -100,26 +112,27 @@ class Gem::Resolver @conflicts = [] @development = false @ignore_dependencies = false @missing = [] @soft_missing = false @stats = Gem::Resolver::Stats.new end def explain stage, *data # :nodoc: - if DEBUG_RESOLVER - d = data.map { |x| x.inspect }.join(", ") - STDOUT.printf "%20s %s\n", stage.to_s.upcase, d - end end - def explain_list stage, data # :nodoc: - if DEBUG_RESOLVER - STDOUT.printf "%20s (%d entries)\n", stage.to_s.upcase, data.size - data.each do |d| - STDOUT.printf "%20s %s\n", "", d - end - end end ## @@ -132,6 +145,7 @@ class Gem::Resolver spec = possible.pop explain :activate, [spec.full_name, possible.size] activation_request = Gem::Resolver::ActivationRequest.new spec, dep, possible @@ -142,8 +156,15 @@ class Gem::Resolver def requests s, act, reqs=nil # :nodoc: return reqs if @ignore_dependencies s.dependencies.reverse_each do |d| next if d.type == :development and not @development reqs.add Gem::Resolver::DependencyRequest.new(d, act) @stats.requirement! end @@ -186,6 +207,15 @@ class Gem::Resolver def find_possible dependency # :nodoc: all = @set.find_all dependency matching_platform = select_local_platforms all return matching_platform, all @@ -270,8 +300,8 @@ class Gem::Resolver dep = needed.remove explain :try, [dep, dep.requester ? dep.requester.request : :toplevel] - explain_list :next5, needed.next5 - explain_list :specs, Array(specs).map { |x| x.full_name }.sort # If there is already a spec activated for the requested name... if specs && existing = specs.find { |s| dep.name == s.name } @@ -403,7 +433,10 @@ class Gem::Resolver @missing << dep unless @soft_missing - raise Gem::UnsatisfiableDependencyError.new(dep, platform_mismatch) end end |