class XcodeArchiveCache::BuildGraph::RebuildEvaluator
Attributes
cache_storage[R]
@return [XcodeArchiveCache::ArtifactCache::AbstractStorage]
Public Class Methods
new(cache_storage)
click to toggle source
@param [XcodeArchiveCache::ArtifactCache::AbstractStorage] cache_storage
# File lib/build_graph/rebuild_evaluator.rb, line 7 def initialize(cache_storage) @cache_storage = cache_storage end
Public Instance Methods
evaluate_build_graph(graph)
click to toggle source
@param [XcodeArchiveCache::BuildGraph::Graph] graph
# File lib/build_graph/rebuild_evaluator.rb, line 13 def evaluate_build_graph(graph) return if graph.root_node.state != :unknown # DFS over graph, evaluating dependencies first # stack = [graph.root_node] while stack.length > 0 last_node = stack.last if last_node.state == :evaluating_dependencies # dependencies were evaluated, we're good to go evaluate(last_node) stack.delete_at(stack.length - 1) elsif last_node.state == :unknown last_node.state = :evaluating_dependencies stack += last_node.dependencies.select { |dependency| dependency.state == :unknown } else stack.delete_at(stack.length - 1) end end end
Private Instance Methods
evaluate(node)
click to toggle source
@param [XcodeArchiveCache::BuildGraph::Node] node
# File lib/build_graph/rebuild_evaluator.rb, line 40 def evaluate(node) has_dependencies_waiting_for_rebuild = node.dependencies .reduce(false) { |rebuild, dependency| rebuild || dependency.waiting_for_rebuild } # we include dependency shas in every node sha calculation, # so if some dependency changes, that change propagates # all the way to the top level # if has_dependencies_waiting_for_rebuild || cache_storage.cached_artifact_path(node) == nil node.state = :waiting_for_rebuild else node.state = :exists_in_cache end end