Class: Build::Graph::Task
- Inherits:
-
Object
- Object
- Build::Graph::Task
- Defined in:
- lib/build/graph/task.rb
Instance Attribute Summary collapse
-
#children ⇒ Object
readonly
Returns the value of attribute children.
-
#error ⇒ Object
readonly
Returns the value of attribute error.
-
#inputs ⇒ Object
readonly
Returns the value of attribute inputs.
-
#inputs_failed ⇒ Object
readonly
A list of any inputs whose relevant tasks failed:.
-
#node ⇒ Object
readonly
Returns the value of attribute node.
-
#outputs ⇒ Object
readonly
Returns the value of attribute outputs.
-
#state ⇒ Object
readonly
Returns the value of attribute state.
-
#walker ⇒ Object
readonly
Returns the value of attribute walker.
Instance Method Summary collapse
- #changed! ⇒ Object
- #complete? ⇒ Boolean
- #directories ⇒ Object
-
#dirty? ⇒ Boolean
Returns true if the outputs of the task are out of date w.r.t.
- #failed? ⇒ Boolean
-
#initialize(walker, node) ⇒ Task
constructor
A new instance of Task.
- #inspect ⇒ Object
- #invoke(node) ⇒ Object
-
#visit ⇒ Object
Derived task should override this function to provide appropriate behaviour.
Constructor Details
#initialize(walker, node) ⇒ Task
Returns a new instance of Task.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/build/graph/task.rb', line 24 def initialize(walker, node) @walker = walker @walker.tasks[node] = self @node = node # If the execution of the node fails, this is where we save the error: @error = nil @children = [] @state = nil @inputs_failed = false end |
Instance Attribute Details
#children ⇒ Object (readonly)
Returns the value of attribute children.
44 45 46 |
# File 'lib/build/graph/task.rb', line 44 def children @children end |
#error ⇒ Object (readonly)
Returns the value of attribute error.
125 126 127 |
# File 'lib/build/graph/task.rb', line 125 def error @error end |
#inputs ⇒ Object (readonly)
Returns the value of attribute inputs.
41 42 43 |
# File 'lib/build/graph/task.rb', line 41 def inputs @inputs end |
#inputs_failed ⇒ Object (readonly)
A list of any inputs whose relevant tasks failed:
52 53 54 |
# File 'lib/build/graph/task.rb', line 52 def inputs_failed @inputs_failed end |
#node ⇒ Object (readonly)
Returns the value of attribute node.
49 50 51 |
# File 'lib/build/graph/task.rb', line 49 def node @node end |
#outputs ⇒ Object (readonly)
Returns the value of attribute outputs.
42 43 44 |
# File 'lib/build/graph/task.rb', line 42 def outputs @outputs end |
#state ⇒ Object (readonly)
Returns the value of attribute state.
45 46 47 |
# File 'lib/build/graph/task.rb', line 45 def state @state end |
#walker ⇒ Object (readonly)
Returns the value of attribute walker.
47 48 49 |
# File 'lib/build/graph/task.rb', line 47 def walker @walker end |
Instance Method Details
#changed! ⇒ Object
113 114 115 |
# File 'lib/build/graph/task.rb', line 113 def changed! @walker.delete(@node) if (@inputs.update! or @outputs.update!) end |
#complete? ⇒ Boolean
103 104 105 |
# File 'lib/build/graph/task.rb', line 103 def complete? @state == :complete end |
#directories ⇒ Object
117 118 119 |
# File 'lib/build/graph/task.rb', line 117 def directories (@inputs.roots + @outputs.roots).collect{|path| path.to_s} end |
#dirty? ⇒ Boolean
Returns true if the outputs of the task are out of date w.r.t. the inputs. Currently, does not take into account if the input is a glob and files have been added.
109 110 111 |
# File 'lib/build/graph/task.rb', line 109 def dirty? @outputs.dirty?(@inputs) end |
#failed? ⇒ Boolean
99 100 101 |
# File 'lib/build/graph/task.rb', line 99 def failed? @state == :failed end |
#inspect ⇒ Object
121 122 123 |
# File 'lib/build/graph/task.rb', line 121 def inspect "<#{self.class}:#{'0x%X' % self.object_id} #{@node.inspect} #{@state}>" end |
#invoke(node) ⇒ Object
91 92 93 94 95 96 97 |
# File 'lib/build/graph/task.rb', line 91 def invoke(node) child_task = @walker.call(node) raise ArgumentError.new("Invalid child task") unless child_task @children << child_task end |
#visit ⇒ Object
Derived task should override this function to provide appropriate behaviour.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/build/graph/task.rb', line 55 def visit update_inputs_and_outputs # Inforn the walker a new task is being generated for this node: @walker.enter(self) @fiber = Fiber.new do # If all inputs were good, we can update the node. if wait_for_inputs? begin yield rescue TransientError => error fail!(error) end else fail!(:inputs) end unless wait_for_children? fail!(:children) end update_outputs @state ||= :complete @walker.exit(self) end # Schedule the work, hopefully synchronously: @fiber.resume # This allows the child task to be passed back to the parent when it is first invoked. return self end |