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 }