lib/rant/import/nodes/default.rb in rant-0.4.6 vs lib/rant/import/nodes/default.rb in rant-0.4.8
- old
+ new
@@ -31,10 +31,12 @@
end
class Task
include Node
+ attr_accessor :receiver
+
def initialize(rac, name, prerequisites = [], &block)
super()
@rac = rac or raise ArgumentError, "rac not given"
@name = name or raise ArgumentError, "name not given"
@pre = prerequisites || []
@@ -44,10 +46,11 @@
# success has one of three values:
# nil no invoke
# false invoked, but fail
# true invoked and run successfully
@success = nil
+ @receiver = nil
end
# Get a list of the *names* of all prerequisites. The
# underlying list of prerequisites can't be modified by the
# value returned by this method.
@@ -62,11 +65,11 @@
end
# True if this task has at least one action (block to be
# executed) associated.
def has_actions?
- !!@block
+ @block or @receiver && @receiver.has_pre_action?
end
# Add a prerequisite.
def <<(pre)
@pre_resolved = false
@@ -139,13 +142,17 @@
dep, uf = handle_non_node(dep, opt)
uf && update = true
dep
end
}
+ if @receiver
+ goto_task_home
+ update = true if @receiver.update?(self)
+ end
# Never run a task block for a "needed?" query.
return update if opt[:needed?]
- run if update
+ run if update
@success = true
# IMPORTANT: return update flag
update
rescue StandardError => e
@success = false
@@ -499,32 +506,31 @@
return @ts if @ts
goto_task_home
if File.exist?(@name)
@ts = File.mtime @name
else
- rac.abort(rac.pos_text(@rantfile, @line_number),
- "SourceNode: no such file -- #@name")
+ rac.abort_at(ch, "SourceNode: no such file -- #@name")
end
sd = project_subdir
@pre.each { |f|
nodes = rac.resolve f, sd
if nodes.empty?
if File.exist? f
mtime = File.mtime f
@ts = mtime if mtime > @ts
else
- rac.abort(rac.pos_text(@rantfile, @line_number),
+ rac.abort_at(ch,
"SourceNode: no such file -- #{f}")
end
else
nodes.each { |node|
node.invoke(opt)
if node.respond_to? :timestamp
node_ts = node.timestamp(opt)
goto_task_home
@ts = node_ts if node_ts > @ts
else
- rac.abort(rac.pos_text(@rantfile, @line_number),
+ rac.abort_at(ch,
"SourceNode can't depend on #{node.name}")
end
}
end
}