module Pod::Installer::Analyzer::LockingDependencyAnalyzer
Generates dependencies that require the specific version of the Pods that haven't changed in the {Lockfile}.
Public Class Methods
generate_version_locking_dependencies(lockfile, pods_to_update, pods_to_unlock = [])
click to toggle source
Generates dependencies that require the specific version of the Pods that haven't changed in the {Lockfile}.
These dependencies are passed to the {Resolver}, unless the installer is in update mode, to prevent it from upgrading the Pods that weren't changed in the {Podfile}.
@param [Lockfile] lockfile the lockfile containing dependency constraints
@param [Array<String>] pods_to_update
List of pod names which needs to be updated because installer is in update mode for these pods. Pods in this list and all their recursive dependencies will not be included in generated dependency graph
@param [Array<String>] pods_to_unlock
List of pod names whose version constraints will be removed from the generated dependency graph. Recursive dependencies of the pods won't be affected. This is currently used to force local pods to be evaluated again whenever checksum of the specification of the local pods changes.
@return [Molinillo::DependencyGraph<Dependency>] the dependencies
generated by the lockfile that prevent the resolver to update a Pod.
# File lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb, line 32 def self.generate_version_locking_dependencies(lockfile, pods_to_update, pods_to_unlock = []) dependency_graph = Molinillo::DependencyGraph.new if lockfile added_dependency_strings = Set.new explicit_dependencies = lockfile.dependencies explicit_dependencies.each do |dependency| dependency_graph.add_vertex(dependency.name, dependency, true) end pods = lockfile.to_hash['PODS'] || [] pods.each do |pod| add_to_dependency_graph(pod, [], dependency_graph, pods_to_unlock, added_dependency_strings) end pods_to_update = pods_to_update.flat_map do |u| root_name = Specification.root_name(u).downcase dependency_graph.vertices.each_key.select { |n| Specification.root_name(n).downcase == root_name } end pods_to_update.each do |u| dependency_graph.detach_vertex_named(u) end end dependency_graph end
unlocked_dependency_graph()
click to toggle source
Generates a completely 'unlocked' dependency graph.
@return [Molinillo::DependencyGraph<Dependency>] an empty dependency
graph
# File lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb, line 66 def self.unlocked_dependency_graph Molinillo::DependencyGraph.new end
Private Class Methods
add_child_vertex_to_graph(dependency_string, parents, dependency_graph, pods_to_unlock, added_dependency_strings)
click to toggle source
# File lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb, line 72 def self.add_child_vertex_to_graph(dependency_string, parents, dependency_graph, pods_to_unlock, added_dependency_strings) return unless added_dependency_strings.add?(dependency_string) dependency = Dependency.from_string(dependency_string) if pods_to_unlock.include?(dependency.root_name) dependency = Dependency.new(dependency.name) end vertex = dependency_graph.add_child_vertex(dependency.name, nil, parents, nil) dependency = vertex.payload.merge(dependency) if vertex.payload vertex.payload = dependency dependency end
add_to_dependency_graph(object, parents, dependency_graph, pods_to_unlock, added_dependency_strings)
click to toggle source
# File lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb, line 84 def self.add_to_dependency_graph(object, parents, dependency_graph, pods_to_unlock, added_dependency_strings) case object when String add_child_vertex_to_graph(object, parents, dependency_graph, pods_to_unlock, added_dependency_strings) when Hash object.each do |key, value| dependency = add_child_vertex_to_graph(key, parents, dependency_graph, pods_to_unlock, added_dependency_strings) value.each { |v| add_to_dependency_graph(v, [dependency.name], dependency_graph, pods_to_unlock, added_dependency_strings) } end end end