rake 0.9.2 → 13.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CONTRIBUTING.rdoc +43 -0
- data/Gemfile +10 -0
- data/History.rdoc +2386 -0
- data/MIT-LICENSE +1 -1
- data/README.rdoc +64 -109
- data/Rakefile +22 -386
- data/bin/bundle +105 -0
- data/bin/console +7 -0
- data/bin/rake +20 -23
- data/bin/rdoc +29 -0
- data/bin/rubocop +29 -0
- data/bin/setup +6 -0
- data/doc/command_line_usage.rdoc +65 -21
- data/doc/glossary.rdoc +40 -49
- data/doc/jamis.rb +1 -0
- data/doc/rake.1 +156 -0
- data/doc/rakefile.rdoc +127 -62
- data/exe/rake +27 -0
- data/lib/rake.rb +37 -31
- data/lib/rake/application.rb +507 -272
- data/lib/rake/backtrace.rb +24 -0
- data/lib/rake/clean.rb +55 -8
- data/lib/rake/cloneable.rb +11 -19
- data/lib/rake/cpu_counter.rb +107 -0
- data/lib/rake/default_loader.rb +5 -0
- data/lib/rake/dsl_definition.rb +74 -46
- data/lib/rake/early_time.rb +5 -1
- data/lib/rake/ext/core.rb +5 -6
- data/lib/rake/ext/string.rb +61 -52
- data/lib/rake/file_creation_task.rb +4 -3
- data/lib/rake/file_list.rb +81 -49
- data/lib/rake/file_task.rb +15 -8
- data/lib/rake/file_utils.rb +69 -47
- data/lib/rake/file_utils_ext.rb +18 -26
- data/lib/rake/invocation_chain.rb +25 -19
- data/lib/rake/invocation_exception_mixin.rb +1 -0
- data/lib/rake/late_time.rb +18 -0
- data/lib/rake/linked_list.rb +112 -0
- data/lib/rake/loaders/makefile.rb +23 -9
- data/lib/rake/multi_task.rb +4 -6
- data/lib/rake/name_space.rb +36 -23
- data/lib/rake/packagetask.rb +71 -34
- data/lib/rake/phony.rb +16 -0
- data/lib/rake/private_reader.rb +21 -0
- data/lib/rake/promise.rb +100 -0
- data/lib/rake/pseudo_status.rb +8 -2
- data/lib/rake/rake_module.rb +41 -3
- data/lib/rake/rake_test_loader.rb +21 -7
- data/lib/rake/rule_recursion_overflow_error.rb +2 -2
- data/lib/rake/scope.rb +43 -0
- data/lib/rake/task.rb +186 -79
- data/lib/rake/task_argument_error.rb +1 -0
- data/lib/rake/task_arguments.rb +50 -15
- data/lib/rake/task_manager.rb +89 -65
- data/lib/rake/tasklib.rb +2 -12
- data/lib/rake/testtask.rb +61 -63
- data/lib/rake/thread_history_display.rb +49 -0
- data/lib/rake/thread_pool.rb +163 -0
- data/lib/rake/trace_output.rb +23 -0
- data/lib/rake/version.rb +7 -7
- data/lib/rake/win32.rb +14 -18
- data/rake.gemspec +43 -0
- metadata +82 -221
- data/.gemtest +0 -0
- data/CHANGES +0 -509
- data/RRR +0 -9
- data/TODO +0 -20
- data/doc/rake.1.gz +0 -0
- data/doc/release_notes/rake-0.4.14.rdoc +0 -23
- data/doc/release_notes/rake-0.4.15.rdoc +0 -35
- data/doc/release_notes/rake-0.5.0.rdoc +0 -53
- data/doc/release_notes/rake-0.5.3.rdoc +0 -78
- data/doc/release_notes/rake-0.5.4.rdoc +0 -46
- data/doc/release_notes/rake-0.6.0.rdoc +0 -141
- data/doc/release_notes/rake-0.7.0.rdoc +0 -119
- data/doc/release_notes/rake-0.7.1.rdoc +0 -59
- data/doc/release_notes/rake-0.7.2.rdoc +0 -121
- data/doc/release_notes/rake-0.7.3.rdoc +0 -47
- data/doc/release_notes/rake-0.8.0.rdoc +0 -114
- data/doc/release_notes/rake-0.8.2.rdoc +0 -165
- data/doc/release_notes/rake-0.8.3.rdoc +0 -112
- data/doc/release_notes/rake-0.8.4.rdoc +0 -147
- data/doc/release_notes/rake-0.8.5.rdoc +0 -53
- data/doc/release_notes/rake-0.8.6.rdoc +0 -55
- data/doc/release_notes/rake-0.8.7.rdoc +0 -55
- data/doc/release_notes/rake-0.9.0.rdoc +0 -112
- data/doc/release_notes/rake-0.9.1.rdoc +0 -52
- data/doc/release_notes/rake-0.9.2.rdoc +0 -49
- data/install.rb +0 -90
- data/lib/rake/alt_system.rb +0 -109
- data/lib/rake/classic_namespace.rb +0 -9
- data/lib/rake/contrib/compositepublisher.rb +0 -21
- data/lib/rake/contrib/ftptools.rb +0 -150
- data/lib/rake/contrib/publisher.rb +0 -69
- data/lib/rake/contrib/rubyforgepublisher.rb +0 -16
- data/lib/rake/contrib/sshpublisher.rb +0 -45
- data/lib/rake/contrib/sys.rb +0 -191
- data/lib/rake/ext/module.rb +0 -39
- data/lib/rake/ext/time.rb +0 -14
- data/lib/rake/gempackagetask.rb +0 -13
- data/lib/rake/pathmap.rb +0 -1
- data/lib/rake/rdoctask.rb +0 -230
- data/lib/rake/ruby182_test_unit_fix.rb +0 -25
- data/lib/rake/runtest.rb +0 -21
- data/test/check_expansion.rb +0 -5
- data/test/check_no_expansion.rb +0 -5
- data/test/data/access/Rakefile +0 -35
- data/test/data/chains/Rakefile +0 -15
- data/test/data/comments/Rakefile +0 -18
- data/test/data/default/Rakefile +0 -17
- data/test/data/deprecated_import/Rakefile +0 -1
- data/test/data/dryrun/Rakefile +0 -22
- data/test/data/extra/Rakefile +0 -1
- data/test/data/file_creation_task/Rakefile +0 -31
- data/test/data/imports/Rakefile +0 -19
- data/test/data/imports/deps.mf +0 -1
- data/test/data/multidesc/Rakefile +0 -15
- data/test/data/namespace/Rakefile +0 -64
- data/test/data/rakelib/test1.rb +0 -4
- data/test/data/rbext/rakefile.rb +0 -3
- data/test/data/sample.mf +0 -14
- data/test/data/statusreturn/Rakefile +0 -6
- data/test/data/unittest/Rakefile +0 -1
- data/test/data/verbose/Rakefile +0 -34
- data/test/file_creation.rb +0 -34
- data/test/helper.rb +0 -44
- data/test/in_environment.rb +0 -35
- data/test/reqfile.rb +0 -3
- data/test/reqfile2.rb +0 -3
- data/test/shellcommand.rb +0 -3
- data/test/test_rake.rb +0 -38
- data/test/test_rake_application.rb +0 -364
- data/test/test_rake_application_options.rb +0 -382
- data/test/test_rake_clean.rb +0 -12
- data/test/test_rake_definitions.rb +0 -80
- data/test/test_rake_directory_task.rb +0 -55
- data/test/test_rake_dsl.rb +0 -73
- data/test/test_rake_early_time.rb +0 -31
- data/test/test_rake_extension.rb +0 -59
- data/test/test_rake_file_creation_task.rb +0 -62
- data/test/test_rake_file_list.rb +0 -633
- data/test/test_rake_file_list_path_map.rb +0 -8
- data/test/test_rake_file_task.rb +0 -104
- data/test/test_rake_file_utils.rb +0 -252
- data/test/test_rake_ftp_file.rb +0 -59
- data/test/test_rake_functional.rb +0 -468
- data/test/test_rake_invocation_chain.rb +0 -52
- data/test/test_rake_makefile_loader.rb +0 -23
- data/test/test_rake_multi_task.rb +0 -51
- data/test/test_rake_name_space.rb +0 -43
- data/test/test_rake_package_task.rb +0 -78
- data/test/test_rake_path_map.rb +0 -157
- data/test/test_rake_path_map_explode.rb +0 -31
- data/test/test_rake_path_map_partial.rb +0 -18
- data/test/test_rake_pseudo_status.rb +0 -20
- data/test/test_rake_rdoc_task.rb +0 -81
- data/test/test_rake_require.rb +0 -35
- data/test/test_rake_rules.rb +0 -346
- data/test/test_rake_task.rb +0 -271
- data/test/test_rake_task_argument_parsing.rb +0 -116
- data/test/test_rake_task_arguments.rb +0 -86
- data/test/test_rake_task_lib.rb +0 -9
- data/test/test_rake_task_manager.rb +0 -145
- data/test/test_rake_task_manager_argument_resolution.rb +0 -36
- data/test/test_rake_task_with_arguments.rb +0 -162
- data/test/test_rake_test_task.rb +0 -122
- data/test/test_rake_top_level_functions.rb +0 -76
- data/test/test_rake_win32.rb +0 -83
- data/test/test_sys.rb +0 -20
data/exe/rake
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
#--
|
|
4
|
+
# Copyright (c) 2003, 2004, 2005, 2006, 2007 Jim Weirich
|
|
5
|
+
#
|
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
# of this software and associated documentation files (the "Software"), to
|
|
8
|
+
# deal in the Software without restriction, including without limitation the
|
|
9
|
+
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
10
|
+
# sell copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
# furnished to do so, subject to the following conditions:
|
|
12
|
+
#
|
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
|
14
|
+
# all copies or substantial portions of the Software.
|
|
15
|
+
#
|
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
21
|
+
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
22
|
+
# IN THE SOFTWARE.
|
|
23
|
+
#++
|
|
24
|
+
|
|
25
|
+
require "rake"
|
|
26
|
+
|
|
27
|
+
Rake.application.run
|
data/lib/rake.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
#--
|
|
2
|
-
|
|
3
3
|
# Copyright 2003-2010 by Jim Weirich (jim.weirich@gmail.com)
|
|
4
4
|
#
|
|
5
5
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
@@ -21,44 +21,50 @@
|
|
|
21
21
|
# IN THE SOFTWARE.
|
|
22
22
|
#++
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
module Rake; end
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
require "rake/version"
|
|
27
27
|
|
|
28
|
-
require
|
|
29
|
-
require
|
|
30
|
-
require
|
|
31
|
-
require
|
|
32
|
-
require
|
|
33
|
-
require
|
|
28
|
+
require "rbconfig"
|
|
29
|
+
require "fileutils"
|
|
30
|
+
require "singleton"
|
|
31
|
+
require "monitor"
|
|
32
|
+
require "optparse"
|
|
33
|
+
require "ostruct"
|
|
34
34
|
|
|
35
|
-
require
|
|
36
|
-
require 'rake/ext/string'
|
|
37
|
-
require 'rake/ext/time'
|
|
35
|
+
require "rake/ext/string"
|
|
38
36
|
|
|
39
|
-
require
|
|
37
|
+
require "rake/win32"
|
|
40
38
|
|
|
41
|
-
require
|
|
42
|
-
require
|
|
43
|
-
require
|
|
44
|
-
require
|
|
45
|
-
require
|
|
46
|
-
require
|
|
47
|
-
require
|
|
48
|
-
require
|
|
49
|
-
require
|
|
50
|
-
require
|
|
51
|
-
require
|
|
52
|
-
require
|
|
53
|
-
require
|
|
54
|
-
require
|
|
55
|
-
require
|
|
56
|
-
require
|
|
57
|
-
require
|
|
58
|
-
require
|
|
39
|
+
require "rake/linked_list"
|
|
40
|
+
require "rake/cpu_counter"
|
|
41
|
+
require "rake/scope"
|
|
42
|
+
require "rake/task_argument_error"
|
|
43
|
+
require "rake/rule_recursion_overflow_error"
|
|
44
|
+
require "rake/rake_module"
|
|
45
|
+
require "rake/trace_output"
|
|
46
|
+
require "rake/pseudo_status"
|
|
47
|
+
require "rake/task_arguments"
|
|
48
|
+
require "rake/invocation_chain"
|
|
49
|
+
require "rake/task"
|
|
50
|
+
require "rake/file_task"
|
|
51
|
+
require "rake/file_creation_task"
|
|
52
|
+
require "rake/multi_task"
|
|
53
|
+
require "rake/dsl_definition"
|
|
54
|
+
require "rake/file_utils_ext"
|
|
55
|
+
require "rake/file_list"
|
|
56
|
+
require "rake/default_loader"
|
|
57
|
+
require "rake/early_time"
|
|
58
|
+
require "rake/late_time"
|
|
59
|
+
require "rake/name_space"
|
|
60
|
+
require "rake/task_manager"
|
|
61
|
+
require "rake/application"
|
|
62
|
+
require "rake/backtrace"
|
|
59
63
|
|
|
60
64
|
$trace = false
|
|
61
65
|
|
|
66
|
+
# :stopdoc:
|
|
67
|
+
#
|
|
62
68
|
# Some top level Constants.
|
|
63
69
|
|
|
64
70
|
FileList = Rake::FileList
|
data/lib/rake/application.rb
CHANGED
|
@@ -1,17 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
require
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "optparse"
|
|
3
3
|
|
|
4
|
-
require
|
|
5
|
-
require
|
|
4
|
+
require "rake/task_manager"
|
|
5
|
+
require "rake/file_list"
|
|
6
|
+
require "rake/thread_pool"
|
|
7
|
+
require "rake/thread_history_display"
|
|
8
|
+
require "rake/trace_output"
|
|
9
|
+
require "rake/win32"
|
|
6
10
|
|
|
7
11
|
module Rake
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
CommandLineOptionError = Class.new(StandardError)
|
|
14
|
+
|
|
15
|
+
##
|
|
10
16
|
# Rake main application object. When invoking +rake+ from the
|
|
11
17
|
# command line, a Rake::Application object is created and run.
|
|
12
|
-
|
|
18
|
+
|
|
13
19
|
class Application
|
|
14
20
|
include TaskManager
|
|
21
|
+
include TraceOutput
|
|
15
22
|
|
|
16
23
|
# The name of the application (typically 'rake')
|
|
17
24
|
attr_reader :name
|
|
@@ -22,15 +29,26 @@ module Rake
|
|
|
22
29
|
# Name of the actual rakefile used.
|
|
23
30
|
attr_reader :rakefile
|
|
24
31
|
|
|
32
|
+
# Number of columns on the terminal
|
|
33
|
+
attr_accessor :terminal_columns
|
|
34
|
+
|
|
25
35
|
# List of the top level task names (task names from the command line).
|
|
26
36
|
attr_reader :top_level_tasks
|
|
27
37
|
|
|
28
|
-
|
|
38
|
+
# Override the detected TTY output state (mostly for testing)
|
|
39
|
+
attr_writer :tty_output
|
|
40
|
+
|
|
41
|
+
DEFAULT_RAKEFILES = [
|
|
42
|
+
"rakefile",
|
|
43
|
+
"Rakefile",
|
|
44
|
+
"rakefile.rb",
|
|
45
|
+
"Rakefile.rb"
|
|
46
|
+
].freeze
|
|
29
47
|
|
|
30
48
|
# Initialize a Rake::Application object.
|
|
31
49
|
def initialize
|
|
32
50
|
super
|
|
33
|
-
@name =
|
|
51
|
+
@name = "rake"
|
|
34
52
|
@rakefiles = DEFAULT_RAKEFILES.dup
|
|
35
53
|
@rakefile = nil
|
|
36
54
|
@pending_imports = []
|
|
@@ -39,10 +57,13 @@ module Rake
|
|
|
39
57
|
@default_loader = Rake::DefaultLoader.new
|
|
40
58
|
@original_dir = Dir.pwd
|
|
41
59
|
@top_level_tasks = []
|
|
42
|
-
add_loader(
|
|
43
|
-
add_loader(
|
|
44
|
-
add_loader(
|
|
60
|
+
add_loader("rb", DefaultLoader.new)
|
|
61
|
+
add_loader("rf", DefaultLoader.new)
|
|
62
|
+
add_loader("rake", DefaultLoader.new)
|
|
45
63
|
@tty_output = STDOUT.tty?
|
|
64
|
+
@terminal_columns = ENV["RAKE_COLUMNS"].to_i
|
|
65
|
+
|
|
66
|
+
set_default_options
|
|
46
67
|
end
|
|
47
68
|
|
|
48
69
|
# Run the Rake application. The run method performs the following
|
|
@@ -50,25 +71,30 @@ module Rake
|
|
|
50
71
|
#
|
|
51
72
|
# * Initialize the command line options (+init+).
|
|
52
73
|
# * Define the tasks (+load_rakefile+).
|
|
53
|
-
# * Run the top level tasks (+
|
|
74
|
+
# * Run the top level tasks (+top_level+).
|
|
54
75
|
#
|
|
55
76
|
# If you wish to build a custom rake command, you should call
|
|
56
77
|
# +init+ on your application. Then define any tasks. Finally,
|
|
57
78
|
# call +top_level+ to run your top level tasks.
|
|
58
|
-
def run
|
|
79
|
+
def run(argv = ARGV)
|
|
59
80
|
standard_exception_handling do
|
|
60
|
-
init
|
|
81
|
+
init "rake", argv
|
|
61
82
|
load_rakefile
|
|
62
83
|
top_level
|
|
63
84
|
end
|
|
64
85
|
end
|
|
65
86
|
|
|
66
87
|
# Initialize the command line parameters and app name.
|
|
67
|
-
def init(app_name=
|
|
88
|
+
def init(app_name="rake", argv = ARGV)
|
|
68
89
|
standard_exception_handling do
|
|
69
90
|
@name = app_name
|
|
70
|
-
|
|
71
|
-
|
|
91
|
+
begin
|
|
92
|
+
args = handle_options argv
|
|
93
|
+
rescue ArgumentError
|
|
94
|
+
# Backward compatibility for capistrano
|
|
95
|
+
args = handle_options
|
|
96
|
+
end
|
|
97
|
+
collect_command_line_tasks(args)
|
|
72
98
|
end
|
|
73
99
|
end
|
|
74
100
|
|
|
@@ -81,7 +107,7 @@ module Rake
|
|
|
81
107
|
|
|
82
108
|
# Run the top level tasks of a Rake application.
|
|
83
109
|
def top_level
|
|
84
|
-
|
|
110
|
+
run_with_threads do
|
|
85
111
|
if options.show_tasks
|
|
86
112
|
display_tasks_and_comments
|
|
87
113
|
elsif options.show_prereqs
|
|
@@ -92,6 +118,22 @@ module Rake
|
|
|
92
118
|
end
|
|
93
119
|
end
|
|
94
120
|
|
|
121
|
+
# Run the given block with the thread startup and shutdown.
|
|
122
|
+
def run_with_threads
|
|
123
|
+
thread_pool.gather_history if options.job_stats == :history
|
|
124
|
+
|
|
125
|
+
yield
|
|
126
|
+
|
|
127
|
+
thread_pool.join
|
|
128
|
+
if options.job_stats
|
|
129
|
+
stats = thread_pool.statistics
|
|
130
|
+
puts "Maximum active threads: #{stats[:max_active_threads]} + main"
|
|
131
|
+
puts "Total threads in play: #{stats[:total_threads_in_play]} + main"
|
|
132
|
+
end
|
|
133
|
+
ThreadHistoryDisplay.new(thread_pool.history).show if
|
|
134
|
+
options.job_stats == :history
|
|
135
|
+
end
|
|
136
|
+
|
|
95
137
|
# Add a loader to handle imported files ending in the extension
|
|
96
138
|
# +ext+.
|
|
97
139
|
def add_loader(ext, loader)
|
|
@@ -104,53 +146,108 @@ module Rake
|
|
|
104
146
|
@options ||= OpenStruct.new
|
|
105
147
|
end
|
|
106
148
|
|
|
107
|
-
#
|
|
149
|
+
# Return the thread pool used for multithreaded processing.
|
|
150
|
+
def thread_pool # :nodoc:
|
|
151
|
+
@thread_pool ||= ThreadPool.new(options.thread_pool_size || Rake.suggested_thread_count-1)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# internal ----------------------------------------------------------------
|
|
108
155
|
|
|
109
|
-
|
|
156
|
+
# Invokes a task with arguments that are extracted from +task_string+
|
|
157
|
+
def invoke_task(task_string) # :nodoc:
|
|
110
158
|
name, args = parse_task_string(task_string)
|
|
111
159
|
t = self[name]
|
|
112
160
|
t.invoke(*args)
|
|
113
161
|
end
|
|
114
162
|
|
|
115
|
-
def parse_task_string(string)
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
163
|
+
def parse_task_string(string) # :nodoc:
|
|
164
|
+
/^([^\[]+)(?:\[(.*)\])$/ =~ string.to_s
|
|
165
|
+
|
|
166
|
+
name = $1
|
|
167
|
+
remaining_args = $2
|
|
168
|
+
|
|
169
|
+
return string, [] unless name
|
|
170
|
+
return name, [] if remaining_args.empty?
|
|
171
|
+
|
|
172
|
+
args = []
|
|
173
|
+
|
|
174
|
+
begin
|
|
175
|
+
/\s*((?:[^\\,]|\\.)*?)\s*(?:,\s*(.*))?$/ =~ remaining_args
|
|
176
|
+
|
|
177
|
+
remaining_args = $2
|
|
178
|
+
args << $1.gsub(/\\(.)/, '\1')
|
|
179
|
+
end while remaining_args
|
|
180
|
+
|
|
181
|
+
return name, args
|
|
124
182
|
end
|
|
125
183
|
|
|
126
184
|
# Provide standard exception handling for the given block.
|
|
127
|
-
def standard_exception_handling
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
185
|
+
def standard_exception_handling # :nodoc:
|
|
186
|
+
yield
|
|
187
|
+
rescue SystemExit
|
|
188
|
+
# Exit silently with current status
|
|
189
|
+
raise
|
|
190
|
+
rescue OptionParser::InvalidOption => ex
|
|
191
|
+
$stderr.puts ex.message
|
|
192
|
+
exit(false)
|
|
193
|
+
rescue Exception => ex
|
|
194
|
+
# Exit with error message
|
|
195
|
+
display_error_message(ex)
|
|
196
|
+
exit_because_of_exception(ex)
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# Exit the program because of an unhandled exception.
|
|
200
|
+
# (may be overridden by subclasses)
|
|
201
|
+
def exit_because_of_exception(ex) # :nodoc:
|
|
202
|
+
exit(false)
|
|
141
203
|
end
|
|
142
204
|
|
|
143
205
|
# Display the error message that caused the exception.
|
|
144
|
-
def display_error_message(ex)
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
if
|
|
148
|
-
|
|
206
|
+
def display_error_message(ex) # :nodoc:
|
|
207
|
+
trace "#{name} aborted!"
|
|
208
|
+
display_exception_details(ex)
|
|
209
|
+
trace "Tasks: #{ex.chain}" if has_chain?(ex)
|
|
210
|
+
trace "(See full trace by running task with --trace)" unless
|
|
211
|
+
options.backtrace
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def display_exception_details(ex) # :nodoc:
|
|
215
|
+
display_exception_details_seen << ex
|
|
216
|
+
|
|
217
|
+
display_exception_message_details(ex)
|
|
218
|
+
display_exception_backtrace(ex)
|
|
219
|
+
display_cause_details(ex.cause) if has_cause?(ex)
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def display_cause_details(ex) # :nodoc:
|
|
223
|
+
return if display_exception_details_seen.include? ex
|
|
224
|
+
|
|
225
|
+
trace "\nCaused by:"
|
|
226
|
+
display_exception_details(ex)
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
def display_exception_details_seen # :nodoc:
|
|
230
|
+
Thread.current[:rake_display_exception_details_seen] ||= []
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
def has_cause?(ex) # :nodoc:
|
|
234
|
+
ex.respond_to?(:cause) && ex.cause
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def display_exception_message_details(ex) # :nodoc:
|
|
238
|
+
if ex.instance_of?(RuntimeError)
|
|
239
|
+
trace ex.message
|
|
240
|
+
else
|
|
241
|
+
trace "#{ex.class.name}: #{ex.message}"
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
def display_exception_backtrace(ex) # :nodoc:
|
|
246
|
+
if options.backtrace
|
|
247
|
+
trace ex.backtrace.join("\n")
|
|
149
248
|
else
|
|
150
|
-
|
|
249
|
+
trace Backtrace.collapse(ex.backtrace).join("\n")
|
|
151
250
|
end
|
|
152
|
-
$stderr.puts "Tasks: #{ex.chain}" if has_chain?(ex)
|
|
153
|
-
$stderr.puts "(See full trace by running task with --trace)" unless options.trace
|
|
154
251
|
end
|
|
155
252
|
|
|
156
253
|
# Warn about deprecated usage.
|
|
@@ -158,27 +255,28 @@ module Rake
|
|
|
158
255
|
# Example:
|
|
159
256
|
# Rake.application.deprecate("import", "Rake.import", caller.first)
|
|
160
257
|
#
|
|
161
|
-
def deprecate(old_usage, new_usage, call_site)
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
258
|
+
def deprecate(old_usage, new_usage, call_site) # :nodoc:
|
|
259
|
+
unless options.ignore_deprecate
|
|
260
|
+
$stderr.puts "WARNING: '#{old_usage}' is deprecated. " +
|
|
261
|
+
"Please use '#{new_usage}' instead.\n" +
|
|
262
|
+
" at #{call_site}"
|
|
263
|
+
end
|
|
166
264
|
end
|
|
167
265
|
|
|
168
266
|
# Does the exception have a task invocation chain?
|
|
169
|
-
def has_chain?(exception)
|
|
267
|
+
def has_chain?(exception) # :nodoc:
|
|
170
268
|
exception.respond_to?(:chain) && exception.chain
|
|
171
269
|
end
|
|
172
270
|
private :has_chain?
|
|
173
271
|
|
|
174
272
|
# True if one of the files in RAKEFILES is in the current directory.
|
|
175
273
|
# If a match is found, it is copied into @rakefile.
|
|
176
|
-
def have_rakefile
|
|
274
|
+
def have_rakefile # :nodoc:
|
|
177
275
|
@rakefiles.each do |fn|
|
|
178
276
|
if File.exist?(fn)
|
|
179
|
-
others =
|
|
277
|
+
others = FileList.glob(fn, File::FNM_CASEFOLD)
|
|
180
278
|
return others.size == 1 ? others.first : fn
|
|
181
|
-
elsif fn ==
|
|
279
|
+
elsif fn == ""
|
|
182
280
|
return fn
|
|
183
281
|
end
|
|
184
282
|
end
|
|
@@ -186,38 +284,41 @@ module Rake
|
|
|
186
284
|
end
|
|
187
285
|
|
|
188
286
|
# True if we are outputting to TTY, false otherwise
|
|
189
|
-
def tty_output?
|
|
287
|
+
def tty_output? # :nodoc:
|
|
190
288
|
@tty_output
|
|
191
289
|
end
|
|
192
290
|
|
|
193
|
-
# Override the detected TTY output state (mostly for testing)
|
|
194
|
-
def tty_output=( tty_output_state )
|
|
195
|
-
@tty_output = tty_output_state
|
|
196
|
-
end
|
|
197
|
-
|
|
198
291
|
# We will truncate output if we are outputting to a TTY or if we've been
|
|
199
292
|
# given an explicit column width to honor
|
|
200
|
-
def truncate_output?
|
|
201
|
-
tty_output? ||
|
|
293
|
+
def truncate_output? # :nodoc:
|
|
294
|
+
tty_output? || @terminal_columns.nonzero?
|
|
202
295
|
end
|
|
203
296
|
|
|
204
297
|
# Display the tasks and comments.
|
|
205
|
-
def display_tasks_and_comments
|
|
298
|
+
def display_tasks_and_comments # :nodoc:
|
|
206
299
|
displayable_tasks = tasks.select { |t|
|
|
207
|
-
|
|
300
|
+
(options.show_all_tasks || t.comment) &&
|
|
301
|
+
t.name =~ options.show_task_pattern
|
|
208
302
|
}
|
|
209
303
|
case options.show_tasks
|
|
210
304
|
when :tasks
|
|
211
|
-
width = displayable_tasks.
|
|
212
|
-
|
|
305
|
+
width = displayable_tasks.map { |t| t.name_with_args.length }.max || 10
|
|
306
|
+
if truncate_output?
|
|
307
|
+
max_column = terminal_width - name.size - width - 7
|
|
308
|
+
else
|
|
309
|
+
max_column = nil
|
|
310
|
+
end
|
|
311
|
+
|
|
213
312
|
displayable_tasks.each do |t|
|
|
214
|
-
printf
|
|
215
|
-
t.name_with_args,
|
|
313
|
+
printf("#{name} %-#{width}s # %s\n",
|
|
314
|
+
t.name_with_args,
|
|
315
|
+
max_column ? truncate(t.comment, max_column) : t.comment)
|
|
216
316
|
end
|
|
217
317
|
when :describe
|
|
218
318
|
displayable_tasks.each do |t|
|
|
219
319
|
puts "#{name} #{t.name_with_args}"
|
|
220
|
-
t.full_comment
|
|
320
|
+
comment = t.full_comment || ""
|
|
321
|
+
comment.split("\n").each do |line|
|
|
221
322
|
puts " #{line}"
|
|
222
323
|
end
|
|
223
324
|
puts
|
|
@@ -225,7 +326,7 @@ module Rake
|
|
|
225
326
|
when :lines
|
|
226
327
|
displayable_tasks.each do |t|
|
|
227
328
|
t.locations.each do |loc|
|
|
228
|
-
printf "#{name} %-30s %s\n",t.name_with_args, loc
|
|
329
|
+
printf "#{name} %-30s %s\n", t.name_with_args, loc
|
|
229
330
|
end
|
|
230
331
|
end
|
|
231
332
|
else
|
|
@@ -233,9 +334,9 @@ module Rake
|
|
|
233
334
|
end
|
|
234
335
|
end
|
|
235
336
|
|
|
236
|
-
def terminal_width
|
|
237
|
-
if
|
|
238
|
-
result =
|
|
337
|
+
def terminal_width # :nodoc:
|
|
338
|
+
if @terminal_columns.nonzero?
|
|
339
|
+
result = @terminal_columns
|
|
239
340
|
else
|
|
240
341
|
result = unix? ? dynamic_width : 80
|
|
241
342
|
end
|
|
@@ -245,179 +346,299 @@ module Rake
|
|
|
245
346
|
end
|
|
246
347
|
|
|
247
348
|
# Calculate the dynamic width of the
|
|
248
|
-
def dynamic_width
|
|
349
|
+
def dynamic_width # :nodoc:
|
|
249
350
|
@dynamic_width ||= (dynamic_width_stty.nonzero? || dynamic_width_tput)
|
|
250
351
|
end
|
|
251
352
|
|
|
252
|
-
def dynamic_width_stty
|
|
353
|
+
def dynamic_width_stty # :nodoc:
|
|
253
354
|
%x{stty size 2>/dev/null}.split[1].to_i
|
|
254
355
|
end
|
|
255
356
|
|
|
256
|
-
def dynamic_width_tput
|
|
357
|
+
def dynamic_width_tput # :nodoc:
|
|
257
358
|
%x{tput cols 2>/dev/null}.to_i
|
|
258
359
|
end
|
|
259
360
|
|
|
260
|
-
def unix?
|
|
261
|
-
RbConfig::CONFIG[
|
|
361
|
+
def unix? # :nodoc:
|
|
362
|
+
RbConfig::CONFIG["host_os"] =~
|
|
363
|
+
/(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris|irix|hpux)/i
|
|
262
364
|
end
|
|
263
365
|
|
|
264
|
-
def windows?
|
|
366
|
+
def windows? # :nodoc:
|
|
265
367
|
Win32.windows?
|
|
266
368
|
end
|
|
267
369
|
|
|
268
|
-
def truncate(string, width)
|
|
269
|
-
if string.
|
|
370
|
+
def truncate(string, width) # :nodoc:
|
|
371
|
+
if string.nil?
|
|
372
|
+
""
|
|
373
|
+
elsif string.length <= width
|
|
270
374
|
string
|
|
271
375
|
else
|
|
272
|
-
(
|
|
376
|
+
(string[0, width - 3] || "") + "..."
|
|
273
377
|
end
|
|
274
378
|
end
|
|
275
379
|
|
|
276
380
|
# Display the tasks and prerequisites
|
|
277
|
-
def display_prerequisites
|
|
381
|
+
def display_prerequisites # :nodoc:
|
|
278
382
|
tasks.each do |t|
|
|
279
383
|
puts "#{name} #{t.name}"
|
|
280
384
|
t.prerequisites.each { |pre| puts " #{pre}" }
|
|
281
385
|
end
|
|
282
386
|
end
|
|
283
387
|
|
|
388
|
+
def trace(*strings) # :nodoc:
|
|
389
|
+
options.trace_output ||= $stderr
|
|
390
|
+
trace_on(options.trace_output, *strings)
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
def sort_options(options) # :nodoc:
|
|
394
|
+
options.sort_by { |opt|
|
|
395
|
+
opt.select { |o| o.is_a?(String) && o =~ /^-/ }.map(&:downcase).sort.reverse
|
|
396
|
+
}
|
|
397
|
+
end
|
|
398
|
+
private :sort_options
|
|
399
|
+
|
|
284
400
|
# A list of all the standard options used in rake, suitable for
|
|
285
401
|
# passing to OptionParser.
|
|
286
|
-
def standard_rake_options
|
|
287
|
-
|
|
288
|
-
[
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
402
|
+
def standard_rake_options # :nodoc:
|
|
403
|
+
sort_options(
|
|
404
|
+
[
|
|
405
|
+
["--all", "-A",
|
|
406
|
+
"Show all tasks, even uncommented ones (in combination with -T or -D)",
|
|
407
|
+
lambda { |value|
|
|
408
|
+
options.show_all_tasks = value
|
|
409
|
+
}
|
|
410
|
+
],
|
|
411
|
+
["--backtrace=[OUT]",
|
|
412
|
+
"Enable full backtrace. OUT can be stderr (default) or stdout.",
|
|
413
|
+
lambda { |value|
|
|
414
|
+
options.backtrace = true
|
|
415
|
+
select_trace_output(options, "backtrace", value)
|
|
416
|
+
}
|
|
417
|
+
],
|
|
418
|
+
["--build-all", "-B",
|
|
419
|
+
"Build all prerequisites, including those which are up-to-date.",
|
|
420
|
+
lambda { |value|
|
|
421
|
+
options.build_all = true
|
|
422
|
+
}
|
|
423
|
+
],
|
|
424
|
+
["--comments",
|
|
425
|
+
"Show commented tasks only",
|
|
426
|
+
lambda { |value|
|
|
427
|
+
options.show_all_tasks = !value
|
|
428
|
+
}
|
|
429
|
+
],
|
|
430
|
+
["--describe", "-D [PATTERN]",
|
|
431
|
+
"Describe the tasks (matching optional PATTERN), then exit.",
|
|
432
|
+
lambda { |value|
|
|
433
|
+
select_tasks_to_show(options, :describe, value)
|
|
434
|
+
}
|
|
435
|
+
],
|
|
436
|
+
["--dry-run", "-n",
|
|
437
|
+
"Do a dry run without executing actions.",
|
|
438
|
+
lambda { |value|
|
|
439
|
+
Rake.verbose(true)
|
|
440
|
+
Rake.nowrite(true)
|
|
441
|
+
options.dryrun = true
|
|
442
|
+
options.trace = true
|
|
443
|
+
}
|
|
444
|
+
],
|
|
445
|
+
["--execute", "-e CODE",
|
|
446
|
+
"Execute some Ruby code and exit.",
|
|
447
|
+
lambda { |value|
|
|
448
|
+
eval(value)
|
|
449
|
+
exit
|
|
450
|
+
}
|
|
451
|
+
],
|
|
452
|
+
["--execute-print", "-p CODE",
|
|
453
|
+
"Execute some Ruby code, print the result, then exit.",
|
|
454
|
+
lambda { |value|
|
|
455
|
+
puts eval(value)
|
|
456
|
+
exit
|
|
457
|
+
}
|
|
458
|
+
],
|
|
459
|
+
["--execute-continue", "-E CODE",
|
|
460
|
+
"Execute some Ruby code, " +
|
|
461
|
+
"then continue with normal task processing.",
|
|
462
|
+
lambda { |value| eval(value) }
|
|
463
|
+
],
|
|
464
|
+
["--jobs", "-j [NUMBER]",
|
|
465
|
+
"Specifies the maximum number of tasks to execute in parallel. " +
|
|
466
|
+
"(default is number of CPU cores + 4)",
|
|
467
|
+
lambda { |value|
|
|
468
|
+
if value.nil? || value == ""
|
|
469
|
+
value = Float::INFINITY
|
|
470
|
+
elsif value =~ /^\d+$/
|
|
471
|
+
value = value.to_i
|
|
472
|
+
else
|
|
473
|
+
value = Rake.suggested_thread_count
|
|
474
|
+
end
|
|
475
|
+
value = 1 if value < 1
|
|
476
|
+
options.thread_pool_size = value - 1
|
|
477
|
+
}
|
|
478
|
+
],
|
|
479
|
+
["--job-stats [LEVEL]",
|
|
480
|
+
"Display job statistics. " +
|
|
481
|
+
"LEVEL=history displays a complete job list",
|
|
482
|
+
lambda { |value|
|
|
483
|
+
if value =~ /^history/i
|
|
484
|
+
options.job_stats = :history
|
|
485
|
+
else
|
|
486
|
+
options.job_stats = true
|
|
487
|
+
end
|
|
488
|
+
}
|
|
489
|
+
],
|
|
490
|
+
["--libdir", "-I LIBDIR",
|
|
491
|
+
"Include LIBDIR in the search path for required modules.",
|
|
492
|
+
lambda { |value| $:.push(value) }
|
|
493
|
+
],
|
|
494
|
+
["--multitask", "-m",
|
|
495
|
+
"Treat all tasks as multitasks.",
|
|
496
|
+
lambda { |value| options.always_multitask = true }
|
|
497
|
+
],
|
|
498
|
+
["--no-search", "--nosearch",
|
|
499
|
+
"-N", "Do not search parent directories for the Rakefile.",
|
|
500
|
+
lambda { |value| options.nosearch = true }
|
|
501
|
+
],
|
|
502
|
+
["--prereqs", "-P",
|
|
503
|
+
"Display the tasks and dependencies, then exit.",
|
|
504
|
+
lambda { |value| options.show_prereqs = true }
|
|
505
|
+
],
|
|
506
|
+
["--quiet", "-q",
|
|
507
|
+
"Do not log messages to standard output.",
|
|
508
|
+
lambda { |value| Rake.verbose(false) }
|
|
509
|
+
],
|
|
510
|
+
["--rakefile", "-f [FILENAME]",
|
|
511
|
+
"Use FILENAME as the rakefile to search for.",
|
|
512
|
+
lambda { |value|
|
|
513
|
+
value ||= ""
|
|
514
|
+
@rakefiles.clear
|
|
515
|
+
@rakefiles << value
|
|
516
|
+
}
|
|
517
|
+
],
|
|
518
|
+
["--rakelibdir", "--rakelib", "-R RAKELIBDIR",
|
|
519
|
+
"Auto-import any .rake files in RAKELIBDIR. " +
|
|
520
|
+
"(default is 'rakelib')",
|
|
521
|
+
lambda { |value|
|
|
522
|
+
options.rakelib = value.split(File::PATH_SEPARATOR)
|
|
523
|
+
}
|
|
524
|
+
],
|
|
525
|
+
["--require", "-r MODULE",
|
|
526
|
+
"Require MODULE before executing rakefile.",
|
|
527
|
+
lambda { |value|
|
|
353
528
|
begin
|
|
354
|
-
|
|
355
|
-
rescue LoadError
|
|
356
|
-
|
|
529
|
+
require value
|
|
530
|
+
rescue LoadError => ex
|
|
531
|
+
begin
|
|
532
|
+
rake_require value
|
|
533
|
+
rescue LoadError
|
|
534
|
+
raise ex
|
|
535
|
+
end
|
|
357
536
|
end
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
options.
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
537
|
+
}
|
|
538
|
+
],
|
|
539
|
+
["--rules",
|
|
540
|
+
"Trace the rules resolution.",
|
|
541
|
+
lambda { |value| options.trace_rules = true }
|
|
542
|
+
],
|
|
543
|
+
["--silent", "-s",
|
|
544
|
+
"Like --quiet, but also suppresses the " +
|
|
545
|
+
"'in directory' announcement.",
|
|
546
|
+
lambda { |value|
|
|
547
|
+
Rake.verbose(false)
|
|
548
|
+
options.silent = true
|
|
549
|
+
}
|
|
550
|
+
],
|
|
551
|
+
["--suppress-backtrace PATTERN",
|
|
552
|
+
"Suppress backtrace lines matching regexp PATTERN. " +
|
|
553
|
+
"Ignored if --trace is on.",
|
|
554
|
+
lambda { |value|
|
|
555
|
+
options.suppress_backtrace_pattern = Regexp.new(value)
|
|
556
|
+
}
|
|
557
|
+
],
|
|
558
|
+
["--system", "-g",
|
|
559
|
+
"Using system wide (global) rakefiles " +
|
|
560
|
+
"(usually '~/.rake/*.rake').",
|
|
561
|
+
lambda { |value| options.load_system = true }
|
|
562
|
+
],
|
|
563
|
+
["--no-system", "--nosystem", "-G",
|
|
564
|
+
"Use standard project Rakefile search paths, " +
|
|
565
|
+
"ignore system wide rakefiles.",
|
|
566
|
+
lambda { |value| options.ignore_system = true }
|
|
567
|
+
],
|
|
568
|
+
["--tasks", "-T [PATTERN]",
|
|
569
|
+
"Display the tasks (matching optional PATTERN) " +
|
|
570
|
+
"with descriptions, then exit. " +
|
|
571
|
+
"-AT combination displays all of tasks contained no description.",
|
|
572
|
+
lambda { |value|
|
|
573
|
+
select_tasks_to_show(options, :tasks, value)
|
|
574
|
+
}
|
|
575
|
+
],
|
|
576
|
+
["--trace=[OUT]", "-t",
|
|
577
|
+
"Turn on invoke/execute tracing, enable full backtrace. " +
|
|
578
|
+
"OUT can be stderr (default) or stdout.",
|
|
579
|
+
lambda { |value|
|
|
580
|
+
options.trace = true
|
|
581
|
+
options.backtrace = true
|
|
582
|
+
select_trace_output(options, "trace", value)
|
|
583
|
+
Rake.verbose(true)
|
|
584
|
+
}
|
|
585
|
+
],
|
|
586
|
+
["--verbose", "-v",
|
|
587
|
+
"Log message to standard output.",
|
|
588
|
+
lambda { |value| Rake.verbose(true) }
|
|
589
|
+
],
|
|
590
|
+
["--version", "-V",
|
|
591
|
+
"Display the program version.",
|
|
592
|
+
lambda { |value|
|
|
593
|
+
puts "rake, version #{Rake::VERSION}"
|
|
594
|
+
exit
|
|
595
|
+
}
|
|
596
|
+
],
|
|
597
|
+
["--where", "-W [PATTERN]",
|
|
598
|
+
"Describe the tasks (matching optional PATTERN), then exit.",
|
|
599
|
+
lambda { |value|
|
|
600
|
+
select_tasks_to_show(options, :lines, value)
|
|
601
|
+
options.show_all_tasks = true
|
|
602
|
+
}
|
|
603
|
+
],
|
|
604
|
+
["--no-deprecation-warnings", "-X",
|
|
605
|
+
"Disable the deprecation warnings.",
|
|
606
|
+
lambda { |value|
|
|
607
|
+
options.ignore_deprecate = true
|
|
608
|
+
}
|
|
609
|
+
],
|
|
610
|
+
])
|
|
611
|
+
end
|
|
612
|
+
|
|
613
|
+
def select_tasks_to_show(options, show_tasks, value) # :nodoc:
|
|
614
|
+
options.show_tasks = show_tasks
|
|
615
|
+
options.show_task_pattern = Regexp.new(value || "")
|
|
616
|
+
Rake::TaskManager.record_task_metadata = true
|
|
617
|
+
end
|
|
618
|
+
private :select_tasks_to_show
|
|
619
|
+
|
|
620
|
+
def select_trace_output(options, trace_option, value) # :nodoc:
|
|
621
|
+
value = value.strip unless value.nil?
|
|
622
|
+
case value
|
|
623
|
+
when "stdout"
|
|
624
|
+
options.trace_output = $stdout
|
|
625
|
+
when "stderr", nil
|
|
626
|
+
options.trace_output = $stderr
|
|
627
|
+
else
|
|
628
|
+
fail CommandLineOptionError,
|
|
629
|
+
"Unrecognized --#{trace_option} option '#{value}'"
|
|
630
|
+
end
|
|
631
|
+
end
|
|
632
|
+
private :select_trace_output
|
|
633
|
+
|
|
634
|
+
# Read and handle the command line options. Returns the command line
|
|
635
|
+
# arguments that we didn't understand, which should (in theory) be just
|
|
636
|
+
# task names and env vars.
|
|
637
|
+
def handle_options(argv) # :nodoc:
|
|
638
|
+
set_default_options
|
|
418
639
|
|
|
419
640
|
OptionParser.new do |opts|
|
|
420
|
-
opts.banner = "
|
|
641
|
+
opts.banner = "#{Rake.application.name} [-f rakefile] {options} targets..."
|
|
421
642
|
opts.separator ""
|
|
422
643
|
opts.separator "Options are ..."
|
|
423
644
|
|
|
@@ -427,23 +648,13 @@ module Rake
|
|
|
427
648
|
end
|
|
428
649
|
|
|
429
650
|
standard_rake_options.each { |args| opts.on(*args) }
|
|
430
|
-
opts.environment(
|
|
431
|
-
end.parse
|
|
432
|
-
|
|
433
|
-
# If class namespaces are requested, set the global options
|
|
434
|
-
# according to the values in the options structure.
|
|
435
|
-
if options.classic_namespace
|
|
436
|
-
$show_tasks = options.show_tasks
|
|
437
|
-
$show_prereqs = options.show_prereqs
|
|
438
|
-
$trace = options.trace
|
|
439
|
-
$dryrun = options.dryrun
|
|
440
|
-
$silent = options.silent
|
|
441
|
-
end
|
|
651
|
+
opts.environment("RAKEOPT")
|
|
652
|
+
end.parse(argv)
|
|
442
653
|
end
|
|
443
654
|
|
|
444
655
|
# Similar to the regular Ruby +require+ command, but will check
|
|
445
656
|
# for *.rake files in addition to *.rb files.
|
|
446
|
-
def rake_require(file_name, paths=$LOAD_PATH, loaded=$")
|
|
657
|
+
def rake_require(file_name, paths=$LOAD_PATH, loaded=$") # :nodoc:
|
|
447
658
|
fn = file_name + ".rake"
|
|
448
659
|
return false if loaded.include?(fn)
|
|
449
660
|
paths.each do |path|
|
|
@@ -457,13 +668,11 @@ module Rake
|
|
|
457
668
|
fail LoadError, "Can't find #{file_name}"
|
|
458
669
|
end
|
|
459
670
|
|
|
460
|
-
def find_rakefile_location
|
|
671
|
+
def find_rakefile_location # :nodoc:
|
|
461
672
|
here = Dir.pwd
|
|
462
|
-
|
|
673
|
+
until (fn = have_rakefile)
|
|
463
674
|
Dir.chdir("..")
|
|
464
|
-
if Dir.pwd == here || options.nosearch
|
|
465
|
-
return nil
|
|
466
|
-
end
|
|
675
|
+
return nil if Dir.pwd == here || options.nosearch
|
|
467
676
|
here = Dir.pwd
|
|
468
677
|
end
|
|
469
678
|
[fn, here]
|
|
@@ -471,14 +680,14 @@ module Rake
|
|
|
471
680
|
Dir.chdir(Rake.original_dir)
|
|
472
681
|
end
|
|
473
682
|
|
|
474
|
-
def print_rakefile_directory(location)
|
|
683
|
+
def print_rakefile_directory(location) # :nodoc:
|
|
475
684
|
$stderr.puts "(in #{Dir.pwd})" unless
|
|
476
685
|
options.silent or original_dir == location
|
|
477
686
|
end
|
|
478
687
|
|
|
479
688
|
def raw_load_rakefile # :nodoc:
|
|
480
689
|
rakefile, location = find_rakefile_location
|
|
481
|
-
if (!
|
|
690
|
+
if (!options.ignore_system) &&
|
|
482
691
|
(options.load_system || rakefile.nil?) &&
|
|
483
692
|
system_dir && File.directory?(system_dir)
|
|
484
693
|
print_rakefile_directory(location)
|
|
@@ -491,8 +700,8 @@ module Rake
|
|
|
491
700
|
@rakefile = rakefile
|
|
492
701
|
Dir.chdir(location)
|
|
493
702
|
print_rakefile_directory(location)
|
|
494
|
-
|
|
495
|
-
|
|
703
|
+
Rake.load_rakefile(File.expand_path(@rakefile)) if
|
|
704
|
+
@rakefile && @rakefile != ""
|
|
496
705
|
options.rakelib.each do |rlib|
|
|
497
706
|
glob("#{rlib}/*.rake") do |name|
|
|
498
707
|
add_import name
|
|
@@ -502,17 +711,17 @@ module Rake
|
|
|
502
711
|
load_imports
|
|
503
712
|
end
|
|
504
713
|
|
|
505
|
-
def glob(path, &block)
|
|
506
|
-
|
|
714
|
+
def glob(path, &block) # :nodoc:
|
|
715
|
+
FileList.glob(path.tr("\\", "/")).each(&block)
|
|
507
716
|
end
|
|
508
717
|
private :glob
|
|
509
718
|
|
|
510
719
|
# The directory path containing the system wide rakefiles.
|
|
511
|
-
def system_dir
|
|
720
|
+
def system_dir # :nodoc:
|
|
512
721
|
@system_dir ||=
|
|
513
722
|
begin
|
|
514
|
-
if ENV[
|
|
515
|
-
ENV[
|
|
723
|
+
if ENV["RAKE_SYSTEM"]
|
|
724
|
+
ENV["RAKE_SYSTEM"]
|
|
516
725
|
else
|
|
517
726
|
standard_system_dir
|
|
518
727
|
end
|
|
@@ -526,7 +735,7 @@ module Rake
|
|
|
526
735
|
end
|
|
527
736
|
else
|
|
528
737
|
def standard_system_dir #:nodoc:
|
|
529
|
-
File.join(File.expand_path(
|
|
738
|
+
File.join(File.expand_path("~"), ".rake")
|
|
530
739
|
end
|
|
531
740
|
end
|
|
532
741
|
private :standard_system_dir
|
|
@@ -534,56 +743,82 @@ module Rake
|
|
|
534
743
|
# Collect the list of tasks on the command line. If no tasks are
|
|
535
744
|
# given, return a list containing only the default task.
|
|
536
745
|
# Environmental assignments are processed at this time as well.
|
|
537
|
-
|
|
746
|
+
#
|
|
747
|
+
# `args` is the list of arguments to peruse to get the list of tasks.
|
|
748
|
+
# It should be the command line that was given to rake, less any
|
|
749
|
+
# recognised command-line options, which OptionParser.parse will
|
|
750
|
+
# have taken care of already.
|
|
751
|
+
def collect_command_line_tasks(args) # :nodoc:
|
|
538
752
|
@top_level_tasks = []
|
|
539
|
-
|
|
540
|
-
if arg =~ /^(\w+)=(.*)$/
|
|
753
|
+
args.each do |arg|
|
|
754
|
+
if arg =~ /^(\w+)=(.*)$/m
|
|
541
755
|
ENV[$1] = $2
|
|
542
756
|
else
|
|
543
757
|
@top_level_tasks << arg unless arg =~ /^-/
|
|
544
758
|
end
|
|
545
759
|
end
|
|
546
|
-
@top_level_tasks.push(
|
|
760
|
+
@top_level_tasks.push(default_task_name) if @top_level_tasks.empty?
|
|
761
|
+
end
|
|
762
|
+
|
|
763
|
+
# Default task name ("default").
|
|
764
|
+
# (May be overridden by subclasses)
|
|
765
|
+
def default_task_name # :nodoc:
|
|
766
|
+
"default"
|
|
547
767
|
end
|
|
548
768
|
|
|
549
769
|
# Add a file to the list of files to be imported.
|
|
550
|
-
def add_import(fn)
|
|
770
|
+
def add_import(fn) # :nodoc:
|
|
551
771
|
@pending_imports << fn
|
|
552
772
|
end
|
|
553
773
|
|
|
554
774
|
# Load the pending list of imported files.
|
|
555
|
-
def load_imports
|
|
775
|
+
def load_imports # :nodoc:
|
|
556
776
|
while fn = @pending_imports.shift
|
|
557
777
|
next if @imported.member?(fn)
|
|
558
|
-
|
|
559
|
-
fn_task.invoke
|
|
560
|
-
end
|
|
778
|
+
fn_task = lookup(fn) and fn_task.invoke
|
|
561
779
|
ext = File.extname(fn)
|
|
562
780
|
loader = @loaders[ext] || @default_loader
|
|
563
781
|
loader.load(fn)
|
|
782
|
+
if fn_task = lookup(fn) and fn_task.needed?
|
|
783
|
+
fn_task.reenable
|
|
784
|
+
fn_task.invoke
|
|
785
|
+
loader.load(fn)
|
|
786
|
+
end
|
|
564
787
|
@imported << fn
|
|
565
788
|
end
|
|
566
789
|
end
|
|
567
790
|
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
@const_warning ||= false
|
|
571
|
-
if ! @const_warning
|
|
572
|
-
$stderr.puts %{WARNING: Deprecated reference to top-level constant '#{const_name}' } +
|
|
573
|
-
%{found at: #{rakefile_location}} # '
|
|
574
|
-
$stderr.puts %{ Use --classic-namespace on rake command}
|
|
575
|
-
$stderr.puts %{ or 'require "rake/classic_namespace"' in Rakefile}
|
|
576
|
-
end
|
|
577
|
-
@const_warning = true
|
|
578
|
-
end
|
|
579
|
-
|
|
580
|
-
def rakefile_location backtrace = caller
|
|
581
|
-
backtrace.map { |t| t[/([^:]+):/,1] }
|
|
791
|
+
def rakefile_location(backtrace=caller) # :nodoc:
|
|
792
|
+
backtrace.map { |t| t[/([^:]+):/, 1] }
|
|
582
793
|
|
|
583
794
|
re = /^#{@rakefile}$/
|
|
584
795
|
re = /#{re.source}/i if windows?
|
|
585
796
|
|
|
586
|
-
backtrace.find { |str| str =~ re } ||
|
|
797
|
+
backtrace.find { |str| str =~ re } || ""
|
|
798
|
+
end
|
|
799
|
+
|
|
800
|
+
def set_default_options # :nodoc:
|
|
801
|
+
options.always_multitask = false
|
|
802
|
+
options.backtrace = false
|
|
803
|
+
options.build_all = false
|
|
804
|
+
options.dryrun = false
|
|
805
|
+
options.ignore_deprecate = false
|
|
806
|
+
options.ignore_system = false
|
|
807
|
+
options.job_stats = false
|
|
808
|
+
options.load_system = false
|
|
809
|
+
options.nosearch = false
|
|
810
|
+
options.rakelib = %w[rakelib]
|
|
811
|
+
options.show_all_tasks = false
|
|
812
|
+
options.show_prereqs = false
|
|
813
|
+
options.show_task_pattern = nil
|
|
814
|
+
options.show_tasks = nil
|
|
815
|
+
options.silent = false
|
|
816
|
+
options.suppress_backtrace_pattern = nil
|
|
817
|
+
options.thread_pool_size = Rake.suggested_thread_count
|
|
818
|
+
options.trace = false
|
|
819
|
+
options.trace_output = $stderr
|
|
820
|
+
options.trace_rules = false
|
|
587
821
|
end
|
|
822
|
+
|
|
588
823
|
end
|
|
589
824
|
end
|