class Bundler::Resolver
Constants
- ALL
Public Class Methods
new(index, source_requirements, base)
click to toggle source
# File lib/bundler/resolver.rb, line 187 def initialize(index, source_requirements, base) @index = index @source_requirements = source_requirements @base = base @resolver = Molinillo::Resolver.new(self, self) @search_for = {} @base_dg = Molinillo::DependencyGraph.new @base.each { |ls| @base_dg.add_root_vertex ls.name, Dependency.new(ls.name, ls.version) } end
resolve(requirements, index, source_requirements = {}, base = [])
click to toggle source
Figures out the best possible configuration of gems that satisfies the list of passed dependencies and any child dependencies without causing any gem activation errors.
Parameters¶ ↑
- *dependencies<Gem::Dependency>
-
The list of dependencies to resolve
Returns¶ ↑
- <GemBundle>,nil
-
If the list of dependencies can be resolved, a
collection of gemspecs is returned. Otherwise, nil is returned.
# File lib/bundler/resolver.rb, line 179 def self.resolve(requirements, index, source_requirements = {}, base = []) base = SpecSet.new(base) unless base.is_a?(SpecSet) resolver = new(index, source_requirements, base) result = resolver.start(requirements) SpecSet.new(result) end
Public Instance Methods
after_resolution()
click to toggle source
# File lib/bundler/resolver.rb, line 233 def after_resolution Bundler.ui.info '' end
before_resolution()
click to toggle source
# File lib/bundler/resolver.rb, line 229 def before_resolution Bundler.ui.info 'Resolving dependencies...', false end
debug(depth = 0) { || ... }
click to toggle source
Conveys debug information to the user.
@param [Integer] depth the current depth of the resolution process. @return [void]
# File lib/bundler/resolver.rb, line 217 def debug(depth = 0) if debug? debug_info = yield debug_info = debug_info.inspect unless debug_info.is_a?(String) STDERR.puts debug_info.split("\n").map { |s| ' ' * depth + s } end end
debug?()
click to toggle source
# File lib/bundler/resolver.rb, line 225 def debug? ENV['DEBUG_RESOLVER'] || ENV['DEBUG_RESOLVER_TREE'] end
indicate_progress()
click to toggle source
# File lib/bundler/resolver.rb, line 237 def indicate_progress Bundler.ui.info '.', false end
start(requirements)
click to toggle source
# File lib/bundler/resolver.rb, line 197 def start(requirements) verify_gemfile_dependencies_are_found!(requirements) dg = @resolver.resolve(requirements, @base_dg) dg.map(&:payload).map(&:to_specs).flatten rescue Molinillo::VersionConflict => e raise VersionConflict.new(e.conflicts.keys.uniq, e.message) rescue Molinillo::CircularDependencyError => e names = e.dependencies.sort_by(&:name).map { |d| "gem '#{d.name}'"} raise CyclicDependencyError, "Your Gemfile requires gems that depend" " on each other, creating an infinite loop. Please remove" " #{names.count > 1 ? 'either ' : '' }#{names.join(' or ')}" " and try again." end