123456789_123456789_123456789_123456789_123456789_

Class: Rake::MultiTask

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Task
Instance Chain:
self, Task
Inherits: Rake::Task
Defined in: lib/rake/multi_task.rb

Overview

Same as a regular task, but the immediate prerequisites are done in parallel using Ruby threads.

Class Method Summary

Task - Inherited

.[]

Return a task with the given name.

.clear

Clear the task list.

.create_rule

Define a rule for synthesizing tasks.

.define_task

Define a task given args and an option block.

.new

Create a task named task_name with no actions or prerequisites.

.scope_name

Apply the scope to the task name according to the rules for this kind of task.

.task_defined?

TRUE if the task name is already defined.

.tasks

List of all defined tasks.

Instance Attribute Summary

Task - Inherited

#application

Application owning this task.

#comment

First line (or sentence) of all comments.

#sources,
#sources=

List of sources for task.

#actions

List of actions attached to a task.

#already_invoked

Has this task already been invoked? Already invoked tasks will be skipped unless you reenable them.

#locations

File/Line locations of each of the task definitions for this task (only valid if the task was defined with the detect location option set).

#needed?

Is this task needed?

#prerequisites

List of prerequisites for a task.

#scope

Array of nested namespaces names used for task lookup by this task.

Instance Method Summary

Task - Inherited

#add_description

Add a description to the task.

#all_prerequisite_tasks

List of all unique prerequisite tasks including prerequisite tasks' prerequisites.

#arg_names

Name of arguments for this task.

#clear

Clear the existing prerequisites, actions, comments, and arguments of a rake task.

#clear_actions

Clear the existing actions on a rake task.

#clear_args

Clear the existing arguments on a rake task.

#clear_comments

Clear the existing comments on a rake task.

#clear_prerequisites

Clear the existing prerequisites of a rake task.

#enhance

Enhance a task with prerequisites or actions.

#execute

Execute the actions associated with this task.

#full_comment

Full collection of comments.

#investigation

Return a string describing the internal state of a task.

#invoke

Invoke the task if it is needed.

#name

Name of the task, including any namespace qualifiers.

#prerequisite_tasks

List of prerequisite tasks.

#reenable

Reenable the task, allowing its tasks to be executed if the task is invoked again.

#set_arg_names

Set the names of the arguments for this task.

#source

First source from a rule (nil if no sources).

#timestamp

Timestamp for this task.

#to_s

Return task name.

#first_sentence

Get the first sentence in a string.

#format_trace_flags

Format the trace flags for display.

#transform_comments

Transform the list of comments as specified by the block and join with the separator.

Constructor Details

This class inherits a constructor from Rake::Task

Instance Method Details

#invoke_with_call_chain(task_args, invocation_chain)

Same as invoke, but explicitly pass a call chain to detect circular dependencies. This is largely copied from Task but has been updated such that if multiple tasks depend on this one in parallel, they will all fail if the first execution of this task fails.

[ GitHub ]

  
# File 'lib/rake/multi_task.rb', line 13

def invoke_with_call_chain(task_args, invocation_chain)
  new_chain = Rake::InvocationChain.append(self, invocation_chain)
  @lock.synchronize do
    begin
      if @already_invoked
        if @invocation_exception
          if application.options.trace
            application.trace "** Previous invocation of #{name} failed #{format_trace_flags}"
          end
          raise @invocation_exception
        else
          return
        end
      end

      if application.options.trace
        application.trace "** Invoke #{name} #{format_trace_flags}"
      end
      @already_invoked = true

      invoke_prerequisites(task_args, new_chain)
      execute(task_args) if needed?
    rescue Exception => ex
      add_chain_to(ex, new_chain)
      @invocation_exception = ex
      raise
    end
  end
end