Class: Rake::Task
Overview
Rake’s circular dependency checks (InvocationChain) only applies to task prerequisites, all other cases result in the non too-descriptive thread sleeping error. This change can deal with circular dependencies that occur from direct task invocation, e.g:
task 'foo'=>'bar'
task 'bar' do
task('foo').invoke
end
Direct Known Subclasses
Buildr::CCTask, Buildr::CompileTask, Buildr::Doc::DocTask, Buildr::IntegrationTestsTask, Buildr::Project, Buildr::ResourcesTask, Buildr::Run::RunTask, Buildr::Shell::ShellTask, Buildr::TestTask
Instance Method Summary collapse
Instance Method Details
#invoke(*args) ⇒ Object
:nodoc:
640 641 642 643 |
# File 'lib/buildr/core/application.rb', line 640 def invoke(*args) task_args = TaskArguments.new(arg_names, args) invoke_with_call_chain(task_args, Thread.current[:rake_chain] || InvocationChain::EMPTY) end |
#invoke_with_call_chain(task_args, invocation_chain) ⇒ Object
645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 |
# File 'lib/buildr/core/application.rb', line 645 def invoke_with_call_chain(task_args, invocation_chain) new_chain = InvocationChain.append(self, invocation_chain) @lock.synchronize do if application..trace puts "** Invoke #{name} #{format_trace_flags}" end return if @already_invoked @already_invoked = true begin invoke_prerequisites(task_args, new_chain) rescue trace "Exception while invoking prerequisites of task #{self.inspect}" raise end begin old_chain, Thread.current[:rake_chain] = Thread.current[:rake_chain], new_chain execute(task_args) if needed? ensure Thread.current[:rake_chain] = old_chain end end end |