class Rake::Application
Rake main application object. When invoking rake
from the
command line, a Rake::Application object is
created and run.
Constants
- DEFAULT_RAKEFILES
Attributes
The name of the application (typically 'rake')
The original directory where rake was invoked.
Name of the actual rakefile used.
Number of columns on the terminal
List of the top level task names (task names from the command line).
Override the detected TTY output state (mostly for testing)
Public Class Methods
Initialize a Rake::Application object.
# File lib/rake/application.rb, line 48 def initialize super @name = "rake" @rakefiles = DEFAULT_RAKEFILES.dup @rakefile = nil @pending_imports = [] @imported = [] @loaders = {} @default_loader = Rake::DefaultLoader.new @original_dir = Dir.pwd @top_level_tasks = [] add_loader("rb", DefaultLoader.new) add_loader("rf", DefaultLoader.new) add_loader("rake", DefaultLoader.new) @tty_output = STDOUT.tty? @terminal_columns = ENV["RAKE_COLUMNS"].to_i set_default_options end
Public Instance Methods
Add a loader to handle imported files ending in the extension
ext
.
# File lib/rake/application.rb, line 160 def add_loader(ext, loader) ext = ".#{ext}" unless ext =~ /^\./ @loaders[ext] = loader end
# File lib/rake/application.rb, line 106 def execute(*) exception = DEBUGGER__::SESSION.capture_exception_frames(/(exe|bin|lib)\/rake/) do super end if exception STDERR.puts exception.message DEBUGGER__::SESSION.enter_postmortem_session exception raise exception end end
Initialize the command line parameters and app name.
# File lib/rake/application.rb, line 87 def init(app_name="rake", argv = ARGV) standard_exception_handling do @name = app_name begin args = handle_options argv rescue ArgumentError # Backward compatibility for capistrano args = handle_options end load_debug_at_stop_feature collect_command_line_tasks(args) end end
Find the rakefile and then load it and any pending imports.
# File lib/rake/application.rb, line 123 def load_rakefile standard_exception_handling do raw_load_rakefile end end
Application options from the command line
# File lib/rake/application.rb, line 166 def options @options ||= Struct.new( :always_multitask, :backtrace, :build_all, :dryrun, :ignore_deprecate, :ignore_system, :job_stats, :load_system, :nosearch, :rakelib, :show_all_tasks, :show_prereqs, :show_task_pattern, :show_tasks, :silent, :suppress_backtrace_pattern, :thread_pool_size, :trace, :trace_output, :trace_rules ).new end
Run the Rake application. The run method performs the following three steps:
-
Initialize the command line options (
init
). -
Define the tasks (
load_rakefile
). -
Run the top level tasks (
top_level
).
If you wish to build a custom rake command, you should call
init
on your application. Then define any tasks. Finally,
call top_level
to run your top level tasks.
# File lib/rake/application.rb, line 78 def run(argv = ARGV) standard_exception_handling do init "rake", argv load_rakefile top_level end end
Run the given block with the thread startup and shutdown.
# File lib/rake/application.rb, line 143 def run_with_threads thread_pool.gather_history if options.job_stats == :history yield thread_pool.join if defined?(@thread_pool) if options.job_stats stats = thread_pool.statistics puts "Maximum active threads: #{stats[:max_active_threads]} + main" puts "Total threads in play: #{stats[:total_threads_in_play]} + main" end ThreadHistoryDisplay.new(thread_pool.history).show if options.job_stats == :history end
Run the top level tasks of a Rake application.
# File lib/rake/application.rb, line 130 def top_level run_with_threads do if options.show_tasks display_tasks_and_comments elsif options.show_prereqs display_prerequisites else top_level_tasks.each { |task_name| invoke_task(task_name) } end end end
Private Instance Methods
# File lib/rake/application.rb, line 101 def load_debug_at_stop_feature return unless ENV["RAKE_DEBUG"] require "debug/session" DEBUGGER__::start no_sigint_hook: true, nonstop: true Rake::Task.prepend Module.new { def execute(*) exception = DEBUGGER__::SESSION.capture_exception_frames(/(exe|bin|lib)\/rake/) do super end if exception STDERR.puts exception.message DEBUGGER__::SESSION.enter_postmortem_session exception raise exception end end } rescue LoadError end