Object
######################################################################### A Task is the basic unit of work in a Rakefile. Tasks have associated actions (possibly more than one) and a list of prerequisites. When invoked, a task will first ensure that all of its prerequisites have an opportunity to run and then it will execute its own actions.
Tasks are not usually created directly using the new method, but rather use the file and task convenience methods.
Return a task with the given name. If the task is not currently known, try to synthesize one from the defined rules. If no rules are found, but an existing file matches the task name, assume it is a file task with no dependencies or actions.
# File lib/rake/task.rb, line 297 297: def [](task_name) 298: Rake.application[task_name] 299: end
Clear the task list. This cause rake to immediately forget all the tasks that have been assigned. (Normally used in the unit tests.)
# File lib/rake/task.rb, line 284 284: def clear 285: Rake.application.clear 286: end
Define a rule for synthesizing tasks.
# File lib/rake/task.rb, line 314 314: def create_rule(*args, &block) 315: Rake.application.create_rule(*args, &block) 316: end
Define a task given args and an option block. If a rule with the given name already exists, the prerequisites and actions are added to the existing task. Returns the defined task.
# File lib/rake/task.rb, line 309 309: def define_task(*args, &block) 310: Rake.application.define_task(self, *args, &block) 311: end
Create a task named task_name with no actions or prerequisites. Use enhance to add actions and prerequisites.
# File lib/rake/task.rb, line 71 71: def initialize(task_name, app) 72: @name = task_name.to_s 73: @prerequisites = [] 74: @actions = [] 75: @already_invoked = false 76: @full_comment = nil 77: @comment = nil 78: @lock = Monitor.new 79: @application = app 80: @scope = app.current_scope 81: @arg_names = nil 82: @locations = [] 83: end
Apply the scope to the task name according to the rules for this kind of task. Generic tasks will accept the scope as part of the name.
# File lib/rake/task.rb, line 321 321: def scope_name(scope, task_name) 322: (scope + [task_name]).join(':') 323: end
Add a description to the task. The description can consist of an option argument list (enclosed brackets) and an optional comment.
# File lib/rake/task.rb, line 223 223: def add_description(description) 224: return if ! description 225: comment = description.strip 226: add_comment(comment) if comment && ! comment.empty? 227: end
Name of arguments for this task.
# File lib/rake/task.rb, line 112 112: def arg_names 113: @arg_names || [] 114: end
Clear the existing prerequisites and actions of a rake task.
# File lib/rake/task.rb, line 123 123: def clear 124: clear_prerequisites 125: clear_actions 126: self 127: end
Clear the existing actions on a rake task.
# File lib/rake/task.rb, line 136 136: def clear_actions 137: actions.clear 138: self 139: end
Clear the existing prerequisites of a rake task.
# File lib/rake/task.rb, line 130 130: def clear_prerequisites 131: prerequisites.clear 132: self 133: end
Writing to the comment attribute is the same as adding a description.
# File lib/rake/task.rb, line 230 230: def comment=(description) 231: add_description(description) 232: end
Enhance a task with prerequisites or actions. Returns self.
# File lib/rake/task.rb, line 86 86: def enhance(deps=nil, &block) 87: @prerequisites |= deps if deps 88: @actions << block if block_given? 89: self 90: end
Execute the actions associated with this task.
# File lib/rake/task.rb, line 190 190: def execute(args=nil) 191: args ||= EMPTY_TASK_ARGS 192: if application.options.dryrun 193: puts "** Execute (dry run) #{name}" 194: return 195: end 196: if application.options.trace 197: puts "** Execute #{name}" 198: end 199: application.enhance_with_matching_rule(name) if @actions.empty? 200: @actions.each do |act| 201: case act.arity 202: when 1 203: act.call(self) 204: else 205: act.call(self, args) 206: end 207: end 208: end
# File lib/rake/task.rb, line 44 44: def inspect 45: "<#{self.class} #{name} => [#{prerequisites.join(', ')}]>" 46: end
Return a string describing the internal state of a task. Useful for debugging.
# File lib/rake/task.rb, line 259 259: def investigation 260: result = "------------------------------\n" 261: result << "Investigating #{name}\n" 262: result << "class: #{self.class}\n" 263: result << "task needed: #{needed?}\n" 264: result << "timestamp: #{timestamp}\n" 265: result << "pre-requisites: \n" 266: prereqs = prerequisite_tasks 267: prereqs.sort! {|a,b| a.timestamp <=> b.timestamp} 268: prereqs.each do |p| 269: result << "--#{p.name} (#{p.timestamp})\n" 270: end 271: latest_prereq = prerequisite_tasks.collect { |pre| pre.timestamp }.max 272: result << "latest-prerequisite time: #{latest_prereq}\n" 273: result << "................................\n\n" 274: return result 275: end
Invoke the task if it is needed. Prerequites are invoked first.
# File lib/rake/task.rb, line 142 142: def invoke(*args) 143: task_args = TaskArguments.new(arg_names, args) 144: invoke_with_call_chain(task_args, InvocationChain::EMPTY) 145: end
Name of the task, including any namespace qualifiers.
# File lib/rake/task.rb, line 93 93: def name 94: @name.to_s 95: end
Is this task needed?
# File lib/rake/task.rb, line 211 211: def needed? 212: true 213: end
List of prerequisite tasks
# File lib/rake/task.rb, line 55 55: def prerequisite_tasks 56: prerequisites.collect { |pre| lookup_prerequisite(pre) } 57: end
Reenable the task, allowing its tasks to be executed if the task is invoked again.
# File lib/rake/task.rb, line 118 118: def reenable 119: @already_invoked = false 120: end
Set the names of the arguments for this task. args should be an array of symbols, one for each argument name.
# File lib/rake/task.rb, line 253 253: def set_arg_names(args) 254: @arg_names = args.map { |a| a.to_sym } 255: end
First source from a rule (nil if no sources)
# File lib/rake/task.rb, line 65 65: def source 66: @sources.first if defined?(@sources) 67: end
# File lib/rake/task.rb, line 50 50: def sources 51: @sources ||= [] 52: end
# File lib/rake/task.rb, line 166 166: def add_chain_to(exception, new_chain) 167: exception.extend(InvocationExceptionMixin) unless exception.respond_to?(:chain) 168: exception.chain = new_chain if exception.chain.nil? 169: end
Add a comment to the task. If a comment alread exists, separate the new comment with “ / “.
# File lib/rake/task.rb, line 236 236: def add_comment(comment) 237: if @full_comment 238: @full_comment << " / " 239: else 240: @full_comment = '' 241: end 242: @full_comment << comment 243: if @full_comment =~ /\A([^.]+?\.)( |$)/ 244: @comment = $1 245: else 246: @comment = @full_comment 247: end 248: end
Format the trace flags for display.
# File lib/rake/task.rb, line 181 181: def format_trace_flags 182: flags = [] 183: flags << "first_time" unless @already_invoked 184: flags << "not_needed" unless needed? 185: flags.empty? ? "" : "(" + flags.join(", ") + ")" 186: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.
Comment for this task. Restricted to a single line of no more than 50 characters.