Skip to content

Commit

Permalink
prepend module TaskInvoke to override Task#invoke, reenable.
Browse files Browse the repository at this point in the history
not enq @already_finished tasks.
raise error when accessing undefined @wrapper.
  • Loading branch information
masa16 committed Apr 25, 2017
1 parent de62040 commit 6858d1a
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 4 deletions.
1 change: 1 addition & 0 deletions bin/pwrake
Expand Up @@ -22,6 +22,7 @@ class Rake::Application
end
class Rake::Task
include Pwrake::TaskAlgorithm
prepend Pwrake::TaskInvoke
end

# does NOT exit when writing to broken pipe
Expand Down
4 changes: 4 additions & 0 deletions lib/pwrake/master/master_application.rb
Expand Up @@ -52,6 +52,10 @@ def invoke_task(task_string)
@master.invoke(t,args)
end

def invoke(t,*args)
@master.invoke(t,args)
end

def standard_rake_options
opts = super
opts.each_with_index do |a,i|
Expand Down
23 changes: 19 additions & 4 deletions lib/pwrake/task/task_algorithm.rb
Expand Up @@ -5,12 +5,18 @@ module Pwrake

module TaskAlgorithm

attr_reader :wrapper
attr_reader :subsequents
attr_reader :arguments
attr_reader :property
attr_reader :unfinished_prereq

def wrapper
if @wrapper.nil?
raise "TaskWrapper is not defined for #{self.class}[#{name}]"
end
@wrapper
end

def pw_search_tasks(args)
Log.debug "#{self.class}#pw_search_tasks start, args=#{args.inspect}"
tm = Time.now
Expand Down Expand Up @@ -48,7 +54,7 @@ def search_with_call_chain(subseq, task_args, invocation_chain) # :nodoc:
search_prerequisites(task_args, new_chain)
end
#check_and_enq
if @unfinished_prereq.empty?
if !@already_finished && @unfinished_prereq.empty?
application.task_queue.enq(@wrapper)
end
end
Expand Down Expand Up @@ -87,7 +93,6 @@ def pw_enq_subsequents
#application.task_queue.synchronize(h) do
@subsequents.each do |t| # <<--- competition !!!
#u = t.unfinished_prereq.keys
#Log.debug "enq_subseq: self=#{self.name} subseq=#{t.name} @unfin_preq=#{u.inspect}"
if t && t.check_prereq_finished(self.name)
application.task_queue.enq(t.wrapper)
end
Expand All @@ -98,13 +103,23 @@ def pw_enq_subsequents

def check_prereq_finished(preq_name=nil)
@unfinished_prereq.delete(preq_name)
@unfinished_prereq.empty?
!@already_finished && @unfinished_prereq.empty?
end

def pw_set_property(property)
@property = property
self
end

end # TaskAlgorithm

module TaskInvoke
def invoke(*args)
Rake.application.invoke(self,*args)
end
def reenable
@already_invoked = false
@already_searched = false
end
end
end

0 comments on commit 6858d1a

Please sign in to comment.