class Autobuild::RakeTaskParallelism::ProcessingState
Attributes
Public Class Methods
Source
# File lib/autobuild/parallel.rb, line 77 def initialize(reverse_dependencies, completion_callback: proc {}) @reverse_dependencies = reverse_dependencies @completion_callback = completion_callback @processed = Set.new @active_tasks = Set.new @priorities = Hash.new @started_packages = Hash.new @queue = Hash.new end
Public Instance Methods
Source
# File lib/autobuild/parallel.rb, line 113 def active_task?(task) active_tasks.include?(task) end
Source
# File lib/autobuild/parallel.rb, line 123 def already_processed?(task) task.already_invoked? && !active_task?(task) end
Source
# File lib/autobuild/parallel.rb, line 96 def find_task if (task = queue.min_by { |_t, p| p }) priorities[task.first] = task.last task.first end end
Source
# File lib/autobuild/parallel.rb, line 109 def mark_as_active(pending_task) active_tasks << pending_task end
Source
# File lib/autobuild/parallel.rb, line 127 def needs_processing?(task) !task.already_invoked? && !active_task?(task) end
Source
# File lib/autobuild/parallel.rb, line 103 def pop candidate = find_task queue.delete(candidate) candidate end
Source
# File lib/autobuild/parallel.rb, line 131 def process_finished_task(task) active_tasks.delete(task) processed << task reverse_dependencies[task].each do |candidate| if needs_processing?(candidate) && ready?(candidate) push(candidate, priorities[task]) end end @completion_callback.call(task) end
Source
# File lib/autobuild/parallel.rb, line 87 def push(task, base_priority = 1) if task.respond_to?(:package) started_packages[task.package] ||= -started_packages.size queue[task] = started_packages[task.package] else queue[task] = base_priority end end
Source
# File lib/autobuild/parallel.rb, line 117 def ready?(task) task.prerequisite_tasks.all? do |t| already_processed?(t) end end
Source
# File lib/autobuild/parallel.rb, line 143 def trivial_task?(task) (task.kind_of?(Autobuild::SourceTreeTask) || task.kind_of?(Rake::FileTask)) && task.actions.empty? end