rake 10.4.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 +5 -5
- data/CONTRIBUTING.rdoc +16 -7
- data/Gemfile +10 -0
- data/History.rdoc +2022 -287
- data/README.rdoc +40 -25
- data/Rakefile +25 -65
- data/bin/bundle +105 -0
- data/bin/console +7 -0
- data/bin/rake +20 -24
- data/bin/rdoc +29 -0
- data/bin/rubocop +29 -0
- data/bin/setup +6 -0
- data/doc/glossary.rdoc +10 -11
- data/doc/jamis.rb +1 -0
- data/doc/rake.1 +139 -124
- data/doc/rakefile.rdoc +2 -33
- data/exe/rake +27 -0
- data/lib/rake.rb +35 -43
- data/lib/rake/application.rb +125 -91
- data/lib/rake/backtrace.rb +3 -2
- data/lib/rake/clean.rb +8 -6
- data/lib/rake/cloneable.rb +1 -0
- data/lib/rake/cpu_counter.rb +10 -28
- data/lib/rake/default_loader.rb +1 -0
- data/lib/rake/dsl_definition.rb +6 -12
- data/lib/rake/early_time.rb +1 -0
- data/lib/rake/ext/core.rb +1 -0
- data/lib/rake/ext/string.rb +24 -21
- data/lib/rake/file_creation_task.rb +4 -3
- data/lib/rake/file_list.rb +35 -28
- data/lib/rake/file_task.rb +12 -4
- data/lib/rake/file_utils.rb +38 -32
- data/lib/rake/file_utils_ext.rb +8 -18
- data/lib/rake/invocation_chain.rb +1 -0
- data/lib/rake/invocation_exception_mixin.rb +1 -0
- data/lib/rake/late_time.rb +2 -1
- data/lib/rake/linked_list.rb +24 -15
- data/lib/rake/loaders/makefile.rb +23 -9
- data/lib/rake/multi_task.rb +2 -1
- data/lib/rake/name_space.rb +1 -1
- data/lib/rake/packagetask.rb +40 -17
- data/lib/rake/phony.rb +2 -1
- data/lib/rake/private_reader.rb +1 -0
- data/lib/rake/promise.rb +13 -12
- data/lib/rake/pseudo_status.rb +1 -0
- data/lib/rake/rake_module.rb +30 -1
- data/lib/rake/rake_test_loader.rb +18 -13
- data/lib/rake/rule_recursion_overflow_error.rb +2 -2
- data/lib/rake/scope.rb +3 -2
- data/lib/rake/task.rb +82 -31
- data/lib/rake/task_argument_error.rb +1 -0
- data/lib/rake/task_arguments.rb +15 -4
- data/lib/rake/task_manager.rb +54 -33
- data/lib/rake/tasklib.rb +2 -14
- data/lib/rake/testtask.rb +40 -63
- data/lib/rake/thread_history_display.rb +4 -3
- data/lib/rake/thread_pool.rb +16 -17
- data/lib/rake/trace_output.rb +2 -1
- data/lib/rake/version.rb +4 -1
- data/lib/rake/win32.rb +10 -15
- data/rake.gemspec +43 -0
- metadata +33 -270
- data/.autotest +0 -7
- data/.gemtest +0 -0
- data/.rubocop.yml +0 -27
- data/.togglerc +0 -7
- data/Manifest.txt +0 -166
- 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 -37
- 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.2.rdoc +0 -55
- data/doc/release_notes/rake-0.9.2.rdoc +0 -49
- data/doc/release_notes/rake-0.9.3.rdoc +0 -102
- data/doc/release_notes/rake-0.9.4.rdoc +0 -60
- data/doc/release_notes/rake-0.9.5.rdoc +0 -55
- data/doc/release_notes/rake-0.9.6.rdoc +0 -64
- data/doc/release_notes/rake-10.0.0.rdoc +0 -178
- data/doc/release_notes/rake-10.0.1.rdoc +0 -58
- data/doc/release_notes/rake-10.0.2.rdoc +0 -53
- data/doc/release_notes/rake-10.0.3.rdoc +0 -191
- data/doc/release_notes/rake-10.1.0.rdoc +0 -61
- data/lib/rake/alt_system.rb +0 -110
- data/lib/rake/contrib/.document +0 -1
- data/lib/rake/contrib/compositepublisher.rb +0 -21
- data/lib/rake/contrib/ftptools.rb +0 -137
- data/lib/rake/contrib/publisher.rb +0 -81
- data/lib/rake/contrib/rubyforgepublisher.rb +0 -18
- data/lib/rake/contrib/sshpublisher.rb +0 -61
- data/lib/rake/contrib/sys.rb +0 -4
- data/lib/rake/ext/module.rb +0 -2
- data/lib/rake/ext/pathname.rb +0 -25
- data/lib/rake/ext/time.rb +0 -16
- data/lib/rake/gempackagetask.rb +0 -4
- data/lib/rake/pathmap.rb +0 -3
- data/lib/rake/rdoctask.rb +0 -4
- data/lib/rake/ruby182_test_unit_fix.rb +0 -29
- data/lib/rake/runtest.rb +0 -27
- data/rakelib/publish.rake +0 -20
- data/rakelib/test_times.rake +0 -25
- data/test/file_creation.rb +0 -34
- data/test/helper.rb +0 -130
- data/test/support/rakefile_definitions.rb +0 -478
- data/test/support/ruby_runner.rb +0 -34
- data/test/test_private_reader.rb +0 -42
- data/test/test_rake.rb +0 -40
- data/test/test_rake_application.rb +0 -643
- data/test/test_rake_application_options.rb +0 -466
- data/test/test_rake_backtrace.rb +0 -119
- data/test/test_rake_clean.rb +0 -61
- data/test/test_rake_cpu_counter.rb +0 -68
- data/test/test_rake_definitions.rb +0 -84
- data/test/test_rake_directory_task.rb +0 -76
- data/test/test_rake_dsl.rb +0 -40
- 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 -56
- data/test/test_rake_file_list.rb +0 -655
- data/test/test_rake_file_list_path_map.rb +0 -8
- data/test/test_rake_file_task.rb +0 -197
- data/test/test_rake_file_utils.rb +0 -309
- data/test/test_rake_ftp_file.rb +0 -74
- data/test/test_rake_functional.rb +0 -482
- data/test/test_rake_invocation_chain.rb +0 -64
- data/test/test_rake_late_time.rb +0 -18
- data/test/test_rake_linked_list.rb +0 -84
- data/test/test_rake_makefile_loader.rb +0 -46
- data/test/test_rake_multi_task.rb +0 -64
- data/test/test_rake_name_space.rb +0 -57
- data/test/test_rake_package_task.rb +0 -79
- data/test/test_rake_path_map.rb +0 -168
- data/test/test_rake_path_map_explode.rb +0 -34
- data/test/test_rake_path_map_partial.rb +0 -18
- data/test/test_rake_pathname_extensions.rb +0 -15
- data/test/test_rake_pseudo_status.rb +0 -21
- data/test/test_rake_rake_test_loader.rb +0 -20
- data/test/test_rake_reduce_compat.rb +0 -26
- data/test/test_rake_require.rb +0 -40
- data/test/test_rake_rules.rb +0 -388
- data/test/test_rake_scope.rb +0 -44
- data/test/test_rake_task.rb +0 -393
- data/test/test_rake_task_argument_parsing.rb +0 -119
- data/test/test_rake_task_arguments.rb +0 -127
- data/test/test_rake_task_lib.rb +0 -9
- data/test/test_rake_task_manager.rb +0 -178
- data/test/test_rake_task_manager_argument_resolution.rb +0 -19
- data/test/test_rake_task_with_arguments.rb +0 -172
- data/test/test_rake_test_task.rb +0 -146
- data/test/test_rake_thread_pool.rb +0 -145
- data/test/test_rake_top_level_functions.rb +0 -71
- data/test/test_rake_win32.rb +0 -72
- data/test/test_thread_history_display.rb +0 -101
- data/test/test_trace_output.rb +0 -52
data/lib/rake/task_arguments.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Rake
|
|
2
3
|
|
|
3
4
|
##
|
|
@@ -17,7 +18,8 @@ module Rake
|
|
|
17
18
|
@hash = {}
|
|
18
19
|
@values = values
|
|
19
20
|
names.each_with_index { |name, i|
|
|
20
|
-
|
|
21
|
+
next if values[i].nil? || values[i] == ""
|
|
22
|
+
@hash[name.to_sym] = values[i]
|
|
21
23
|
}
|
|
22
24
|
end
|
|
23
25
|
|
|
@@ -67,21 +69,30 @@ module Rake
|
|
|
67
69
|
|
|
68
70
|
# Returns a Hash of arguments and their values
|
|
69
71
|
def to_hash
|
|
70
|
-
@hash
|
|
72
|
+
@hash.dup
|
|
71
73
|
end
|
|
72
74
|
|
|
73
75
|
def to_s # :nodoc:
|
|
74
|
-
|
|
76
|
+
inspect
|
|
75
77
|
end
|
|
76
78
|
|
|
77
79
|
def inspect # :nodoc:
|
|
78
|
-
|
|
80
|
+
inspection = @hash.map do |k,v|
|
|
81
|
+
"#{k.to_s}: #{v.to_s}"
|
|
82
|
+
end.join(", ")
|
|
83
|
+
|
|
84
|
+
"#<#{self.class} #{inspection}>"
|
|
79
85
|
end
|
|
80
86
|
|
|
81
87
|
# Returns true if +key+ is one of the arguments
|
|
82
88
|
def has_key?(key)
|
|
83
89
|
@hash.has_key?(key)
|
|
84
90
|
end
|
|
91
|
+
alias key? has_key?
|
|
92
|
+
|
|
93
|
+
def fetch(*args, &block)
|
|
94
|
+
@hash.fetch(*args, &block)
|
|
95
|
+
end
|
|
85
96
|
|
|
86
97
|
protected
|
|
87
98
|
|
data/lib/rake/task_manager.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Rake
|
|
2
3
|
|
|
3
4
|
# The TaskManager module is a mixin for managing tasks.
|
|
@@ -5,10 +6,6 @@ module Rake
|
|
|
5
6
|
# Track the last comment made in the Rakefile.
|
|
6
7
|
attr_accessor :last_description
|
|
7
8
|
|
|
8
|
-
# TODO: Remove in Rake 11
|
|
9
|
-
|
|
10
|
-
alias :last_comment :last_description # :nodoc: Backwards compatibility
|
|
11
|
-
|
|
12
9
|
def initialize # :nodoc:
|
|
13
10
|
super
|
|
14
11
|
@tasks = Hash.new
|
|
@@ -18,31 +15,31 @@ module Rake
|
|
|
18
15
|
end
|
|
19
16
|
|
|
20
17
|
def create_rule(*args, &block) # :nodoc:
|
|
21
|
-
pattern, args, deps = resolve_args(args)
|
|
22
|
-
pattern = Regexp.new(Regexp.quote(pattern) +
|
|
23
|
-
@rules << [pattern, args, deps, block]
|
|
18
|
+
pattern, args, deps, order_only = resolve_args(args)
|
|
19
|
+
pattern = Regexp.new(Regexp.quote(pattern) + "$") if String === pattern
|
|
20
|
+
@rules << [pattern, args, deps, order_only, block]
|
|
24
21
|
end
|
|
25
22
|
|
|
26
23
|
def define_task(task_class, *args, &block) # :nodoc:
|
|
27
|
-
task_name, arg_names, deps = resolve_args(args)
|
|
24
|
+
task_name, arg_names, deps, order_only = resolve_args(args)
|
|
28
25
|
|
|
29
26
|
original_scope = @scope
|
|
30
27
|
if String === task_name and
|
|
31
|
-
not task_class.ancestors.include? Rake::FileTask
|
|
28
|
+
not task_class.ancestors.include? Rake::FileTask
|
|
32
29
|
task_name, *definition_scope = *(task_name.split(":").reverse)
|
|
33
30
|
@scope = Scope.make(*(definition_scope + @scope.to_a))
|
|
34
31
|
end
|
|
35
32
|
|
|
36
33
|
task_name = task_class.scope_name(@scope, task_name)
|
|
37
|
-
deps = [deps] unless deps.respond_to?(:to_ary)
|
|
38
|
-
deps = deps.map { |d| Rake.from_pathname(d).to_s }
|
|
39
34
|
task = intern(task_class, task_name)
|
|
40
35
|
task.set_arg_names(arg_names) unless arg_names.empty?
|
|
41
36
|
if Rake::TaskManager.record_task_metadata
|
|
42
37
|
add_location(task)
|
|
43
38
|
task.add_description(get_description(task))
|
|
44
39
|
end
|
|
45
|
-
task.enhance(deps, &block)
|
|
40
|
+
task.enhance(Task.format_deps(deps), &block)
|
|
41
|
+
task | order_only unless order_only.nil?
|
|
42
|
+
task
|
|
46
43
|
ensure
|
|
47
44
|
@scope = original_scope
|
|
48
45
|
end
|
|
@@ -59,7 +56,26 @@ module Rake
|
|
|
59
56
|
self.lookup(task_name, scopes) or
|
|
60
57
|
enhance_with_matching_rule(task_name) or
|
|
61
58
|
synthesize_file_task(task_name) or
|
|
62
|
-
fail
|
|
59
|
+
fail generate_message_for_undefined_task(task_name)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def generate_message_for_undefined_task(task_name)
|
|
63
|
+
message = "Don't know how to build task '#{task_name}' "\
|
|
64
|
+
"(See the list of available tasks with `#{Rake.application.name} --tasks`)"
|
|
65
|
+
message + generate_did_you_mean_suggestions(task_name)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def generate_did_you_mean_suggestions(task_name)
|
|
69
|
+
return "" unless defined?(::DidYouMean::SpellChecker)
|
|
70
|
+
|
|
71
|
+
suggestions = ::DidYouMean::SpellChecker.new(dictionary: @tasks.keys).correct(task_name.to_s)
|
|
72
|
+
if ::DidYouMean.respond_to?(:formatter)# did_you_mean v1.2.0 or later
|
|
73
|
+
::DidYouMean.formatter.message_for(suggestions)
|
|
74
|
+
elsif defined?(::DidYouMean::Formatter) # before did_you_mean v1.2.0
|
|
75
|
+
::DidYouMean::Formatter.new(suggestions).to_s
|
|
76
|
+
else
|
|
77
|
+
""
|
|
78
|
+
end
|
|
63
79
|
end
|
|
64
80
|
|
|
65
81
|
def synthesize_file_task(task_name) # :nodoc:
|
|
@@ -67,8 +83,8 @@ module Rake
|
|
|
67
83
|
define_task(Rake::FileTask, task_name)
|
|
68
84
|
end
|
|
69
85
|
|
|
70
|
-
# Resolve the arguments for a task/rule. Returns a
|
|
71
|
-
# [task_name, arg_name_list, prerequisites].
|
|
86
|
+
# Resolve the arguments for a task/rule. Returns a tuple of
|
|
87
|
+
# [task_name, arg_name_list, prerequisites, order_only_prerequisites].
|
|
72
88
|
def resolve_args(args)
|
|
73
89
|
if args.last.is_a?(Hash)
|
|
74
90
|
deps = args.pop
|
|
@@ -93,7 +109,7 @@ module Rake
|
|
|
93
109
|
else
|
|
94
110
|
arg_names = args
|
|
95
111
|
end
|
|
96
|
-
[task_name, arg_names, []]
|
|
112
|
+
[task_name, arg_names, [], nil]
|
|
97
113
|
end
|
|
98
114
|
private :resolve_args_without_dependencies
|
|
99
115
|
|
|
@@ -102,11 +118,17 @@ module Rake
|
|
|
102
118
|
#
|
|
103
119
|
# The patterns recognized by this argument resolving function are:
|
|
104
120
|
#
|
|
121
|
+
# task :t, order_only: [:e]
|
|
105
122
|
# task :t => [:d]
|
|
123
|
+
# task :t => [:d], order_only: [:e]
|
|
106
124
|
# task :t, [a] => [:d]
|
|
125
|
+
# task :t, [a] => [:d], order_only: [:e]
|
|
107
126
|
#
|
|
108
127
|
def resolve_args_with_dependencies(args, hash) # :nodoc:
|
|
109
|
-
fail "Task Argument Error" if
|
|
128
|
+
fail "Task Argument Error" if
|
|
129
|
+
hash.size != 1 &&
|
|
130
|
+
(hash.size != 2 || !hash.key?(:order_only))
|
|
131
|
+
order_only = hash.delete(:order_only)
|
|
110
132
|
key, value = hash.map { |k, v| [k, v] }.first
|
|
111
133
|
if args.empty?
|
|
112
134
|
task_name = key
|
|
@@ -114,11 +136,11 @@ module Rake
|
|
|
114
136
|
deps = value || []
|
|
115
137
|
else
|
|
116
138
|
task_name = args.shift
|
|
117
|
-
arg_names = key
|
|
118
|
-
deps = value
|
|
139
|
+
arg_names = key || args.shift|| []
|
|
140
|
+
deps = value || []
|
|
119
141
|
end
|
|
120
142
|
deps = [deps] unless deps.respond_to?(:to_ary)
|
|
121
|
-
[task_name, arg_names, deps]
|
|
143
|
+
[task_name, arg_names, deps, order_only]
|
|
122
144
|
end
|
|
123
145
|
private :resolve_args_with_dependencies
|
|
124
146
|
|
|
@@ -129,9 +151,10 @@ module Rake
|
|
|
129
151
|
def enhance_with_matching_rule(task_name, level=0)
|
|
130
152
|
fail Rake::RuleRecursionOverflowError,
|
|
131
153
|
"Rule Recursion Too Deep" if level >= 16
|
|
132
|
-
@rules.each do |pattern, args, extensions, block|
|
|
133
|
-
if pattern.match(task_name)
|
|
134
|
-
task = attempt_rule(task_name, args, extensions, block, level)
|
|
154
|
+
@rules.each do |pattern, args, extensions, order_only, block|
|
|
155
|
+
if pattern && pattern.match(task_name)
|
|
156
|
+
task = attempt_rule(task_name, pattern, args, extensions, block, level)
|
|
157
|
+
task | order_only unless order_only.nil?
|
|
135
158
|
return task if task
|
|
136
159
|
end
|
|
137
160
|
end
|
|
@@ -171,10 +194,10 @@ module Rake
|
|
|
171
194
|
task_name = task_name.to_s
|
|
172
195
|
if task_name =~ /^rake:/
|
|
173
196
|
scopes = Scope.make
|
|
174
|
-
task_name = task_name.sub(/^rake:/,
|
|
197
|
+
task_name = task_name.sub(/^rake:/, "")
|
|
175
198
|
elsif task_name =~ /^(\^+)/
|
|
176
199
|
scopes = initial_scope.trim($1.size)
|
|
177
|
-
task_name = task_name.sub(/^(\^+)/,
|
|
200
|
+
task_name = task_name.sub(/^(\^+)/, "")
|
|
178
201
|
else
|
|
179
202
|
scopes = initial_scope
|
|
180
203
|
end
|
|
@@ -245,8 +268,8 @@ module Rake
|
|
|
245
268
|
end
|
|
246
269
|
|
|
247
270
|
# Attempt to create a rule given the list of prerequisites.
|
|
248
|
-
def attempt_rule(task_name, args, extensions, block, level)
|
|
249
|
-
sources = make_sources(task_name, extensions)
|
|
271
|
+
def attempt_rule(task_name, task_pattern, args, extensions, block, level)
|
|
272
|
+
sources = make_sources(task_name, task_pattern, extensions)
|
|
250
273
|
prereqs = sources.map { |source|
|
|
251
274
|
trace_rule level, "Attempting Rule #{task_name} => #{source}"
|
|
252
275
|
if File.exist?(source) || Rake::Task.task_defined?(source)
|
|
@@ -260,14 +283,14 @@ module Rake
|
|
|
260
283
|
return nil
|
|
261
284
|
end
|
|
262
285
|
}
|
|
263
|
-
task = FileTask.define_task(task_name, {args => prereqs}, &block)
|
|
286
|
+
task = FileTask.define_task(task_name, { args => prereqs }, &block)
|
|
264
287
|
task.sources = prereqs
|
|
265
288
|
task
|
|
266
289
|
end
|
|
267
290
|
|
|
268
291
|
# Make a list of sources from the list of file name extensions /
|
|
269
292
|
# translation procs.
|
|
270
|
-
def make_sources(task_name, extensions)
|
|
293
|
+
def make_sources(task_name, task_pattern, extensions)
|
|
271
294
|
result = extensions.map { |ext|
|
|
272
295
|
case ext
|
|
273
296
|
when /%/
|
|
@@ -275,7 +298,8 @@ module Rake
|
|
|
275
298
|
when %r{/}
|
|
276
299
|
ext
|
|
277
300
|
when /^\./
|
|
278
|
-
task_name.
|
|
301
|
+
source = task_name.sub(task_pattern, ext)
|
|
302
|
+
source == ext ? task_name.ext(ext) : source
|
|
279
303
|
when String
|
|
280
304
|
ext
|
|
281
305
|
when Proc, Method
|
|
@@ -291,9 +315,6 @@ module Rake
|
|
|
291
315
|
result.flatten
|
|
292
316
|
end
|
|
293
317
|
|
|
294
|
-
|
|
295
|
-
private
|
|
296
|
-
|
|
297
318
|
# Return the current description, clearing it in the process.
|
|
298
319
|
def get_description(task)
|
|
299
320
|
desc = @last_description
|
data/lib/rake/tasklib.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "rake"
|
|
2
3
|
|
|
3
4
|
module Rake
|
|
4
5
|
|
|
@@ -6,19 +7,6 @@ module Rake
|
|
|
6
7
|
class TaskLib
|
|
7
8
|
include Cloneable
|
|
8
9
|
include Rake::DSL
|
|
9
|
-
|
|
10
|
-
# Make a symbol by pasting two strings together.
|
|
11
|
-
#
|
|
12
|
-
# NOTE: DEPRECATED! This method is kinda stupid. I don't know why
|
|
13
|
-
# I didn't just use string interpolation. But now other task
|
|
14
|
-
# libraries depend on this so I can't remove it without breaking
|
|
15
|
-
# other people's code. So for now it stays for backwards
|
|
16
|
-
# compatibility. BUT DON'T USE IT.
|
|
17
|
-
#--
|
|
18
|
-
# TODO: Remove in Rake 11
|
|
19
|
-
def paste(a, b) # :nodoc:
|
|
20
|
-
(a.to_s + b.to_s).intern
|
|
21
|
-
end
|
|
22
10
|
end
|
|
23
11
|
|
|
24
12
|
end
|
data/lib/rake/testtask.rb
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
require
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "rake"
|
|
3
|
+
require "rake/tasklib"
|
|
3
4
|
|
|
4
5
|
module Rake
|
|
5
6
|
|
|
6
7
|
# Create a task that runs a set of tests.
|
|
7
8
|
#
|
|
8
9
|
# Example:
|
|
10
|
+
# require "rake/testtask"
|
|
9
11
|
#
|
|
10
12
|
# Rake::TestTask.new do |t|
|
|
11
13
|
# t.libs << "test"
|
|
@@ -35,7 +37,7 @@ module Rake
|
|
|
35
37
|
# Name of test task. (default is :test)
|
|
36
38
|
attr_accessor :name
|
|
37
39
|
|
|
38
|
-
# List of directories
|
|
40
|
+
# List of directories added to $LOAD_PATH before running the
|
|
39
41
|
# tests. (default is 'lib')
|
|
40
42
|
attr_accessor :libs
|
|
41
43
|
|
|
@@ -49,6 +51,7 @@ module Rake
|
|
|
49
51
|
|
|
50
52
|
# Request that the tests be run with the warning flag set.
|
|
51
53
|
# E.g. warning=true implies "ruby -w" used to run the tests.
|
|
54
|
+
# (default is true)
|
|
52
55
|
attr_accessor :warning
|
|
53
56
|
|
|
54
57
|
# Glob pattern to match test files. (default is 'test/test*.rb')
|
|
@@ -62,12 +65,15 @@ module Rake
|
|
|
62
65
|
#
|
|
63
66
|
attr_accessor :loader
|
|
64
67
|
|
|
65
|
-
# Array of
|
|
68
|
+
# Array of command line options to pass to ruby when running test loader.
|
|
66
69
|
attr_accessor :ruby_opts
|
|
67
70
|
|
|
68
71
|
# Description of the test task. (default is 'Run tests')
|
|
69
72
|
attr_accessor :description
|
|
70
73
|
|
|
74
|
+
# Task prerequisites.
|
|
75
|
+
attr_accessor :deps
|
|
76
|
+
|
|
71
77
|
# Explicitly define the list of test files to be included in a
|
|
72
78
|
# test. +list+ is expected to be an array of file names (a
|
|
73
79
|
# FileList is acceptable). If both +pattern+ and +test_files+ are
|
|
@@ -84,20 +90,27 @@ module Rake
|
|
|
84
90
|
@options = nil
|
|
85
91
|
@test_files = nil
|
|
86
92
|
@verbose = false
|
|
87
|
-
@warning =
|
|
93
|
+
@warning = true
|
|
88
94
|
@loader = :rake
|
|
89
95
|
@ruby_opts = []
|
|
90
96
|
@description = "Run tests" + (@name == :test ? "" : " for #{@name}")
|
|
97
|
+
@deps = []
|
|
98
|
+
if @name.is_a?(Hash)
|
|
99
|
+
@deps = @name.values.first
|
|
100
|
+
@name = @name.keys.first
|
|
101
|
+
end
|
|
91
102
|
yield self if block_given?
|
|
92
|
-
@pattern =
|
|
103
|
+
@pattern = "test/test*.rb" if @pattern.nil? && @test_files.nil?
|
|
93
104
|
define
|
|
94
105
|
end
|
|
95
106
|
|
|
96
107
|
# Create the tasks defined by this task lib.
|
|
97
108
|
def define
|
|
98
109
|
desc @description
|
|
99
|
-
task @name do
|
|
110
|
+
task @name => Array(deps) do
|
|
100
111
|
FileUtilsExt.verbose(@verbose) do
|
|
112
|
+
puts "Use TESTOPTS=\"--verbose\" to pass --verbose" \
|
|
113
|
+
", etc. to runners." if ARGV.include? "--verbose"
|
|
101
114
|
args =
|
|
102
115
|
"#{ruby_opts_string} #{run_code} " +
|
|
103
116
|
"#{file_list_string} #{option_list}"
|
|
@@ -105,8 +118,16 @@ module Rake
|
|
|
105
118
|
if !ok && status.respond_to?(:signaled?) && status.signaled?
|
|
106
119
|
raise SignalException.new(status.termsig)
|
|
107
120
|
elsif !ok
|
|
108
|
-
|
|
109
|
-
|
|
121
|
+
status = "Command failed with status (#{status.exitstatus})"
|
|
122
|
+
details = ": [ruby #{args}]"
|
|
123
|
+
message =
|
|
124
|
+
if Rake.application.options.trace or @verbose
|
|
125
|
+
status + details
|
|
126
|
+
else
|
|
127
|
+
status
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
fail message
|
|
110
131
|
end
|
|
111
132
|
end
|
|
112
133
|
end
|
|
@@ -115,10 +136,10 @@ module Rake
|
|
|
115
136
|
end
|
|
116
137
|
|
|
117
138
|
def option_list # :nodoc:
|
|
118
|
-
(ENV[
|
|
119
|
-
ENV[
|
|
120
|
-
ENV[
|
|
121
|
-
ENV[
|
|
139
|
+
(ENV["TESTOPTS"] ||
|
|
140
|
+
ENV["TESTOPT"] ||
|
|
141
|
+
ENV["TEST_OPTS"] ||
|
|
142
|
+
ENV["TEST_OPT"] ||
|
|
122
143
|
@options ||
|
|
123
144
|
"")
|
|
124
145
|
end
|
|
@@ -135,29 +156,20 @@ module Rake
|
|
|
135
156
|
end
|
|
136
157
|
|
|
137
158
|
def file_list_string # :nodoc:
|
|
138
|
-
file_list.map { |fn| "\"#{fn}\"" }.join(
|
|
159
|
+
file_list.map { |fn| "\"#{fn}\"" }.join(" ")
|
|
139
160
|
end
|
|
140
161
|
|
|
141
162
|
def file_list # :nodoc:
|
|
142
|
-
if ENV[
|
|
143
|
-
FileList[ENV[
|
|
163
|
+
if ENV["TEST"]
|
|
164
|
+
FileList[ENV["TEST"]]
|
|
144
165
|
else
|
|
145
166
|
result = []
|
|
146
167
|
result += @test_files.to_a if @test_files
|
|
147
|
-
result
|
|
168
|
+
result += FileList[@pattern].to_a if @pattern
|
|
148
169
|
result
|
|
149
170
|
end
|
|
150
171
|
end
|
|
151
172
|
|
|
152
|
-
def fix # :nodoc:
|
|
153
|
-
case ruby_version
|
|
154
|
-
when '1.8.2'
|
|
155
|
-
"\"#{find_file 'rake/ruby182_test_unit_fix'}\""
|
|
156
|
-
else
|
|
157
|
-
nil
|
|
158
|
-
end || ''
|
|
159
|
-
end
|
|
160
|
-
|
|
161
173
|
def ruby_version # :nodoc:
|
|
162
174
|
RUBY_VERSION
|
|
163
175
|
end
|
|
@@ -167,45 +179,10 @@ module Rake
|
|
|
167
179
|
when :direct
|
|
168
180
|
"-e \"ARGV.each{|f| require f}\""
|
|
169
181
|
when :testrb
|
|
170
|
-
"-S testrb
|
|
182
|
+
"-S testrb"
|
|
171
183
|
when :rake
|
|
172
|
-
"#{
|
|
173
|
-
end
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
def rake_loader # :nodoc:
|
|
177
|
-
find_file('rake/rake_test_loader') or
|
|
178
|
-
fail "unable to find rake test loader"
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
def find_file(fn) # :nodoc:
|
|
182
|
-
$LOAD_PATH.each do |path|
|
|
183
|
-
file_path = File.join(path, "#{fn}.rb")
|
|
184
|
-
return file_path if File.exist? file_path
|
|
185
|
-
end
|
|
186
|
-
nil
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
def rake_include_arg # :nodoc:
|
|
190
|
-
spec = Gem.loaded_specs['rake']
|
|
191
|
-
if spec.respond_to?(:default_gem?) && spec.default_gem?
|
|
192
|
-
""
|
|
193
|
-
else
|
|
194
|
-
"-I\"#{rake_lib_dir}\""
|
|
195
|
-
end
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
def rake_lib_dir # :nodoc:
|
|
199
|
-
find_dir('rake') or
|
|
200
|
-
fail "unable to find rake lib"
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
def find_dir(fn) # :nodoc:
|
|
204
|
-
$LOAD_PATH.each do |path|
|
|
205
|
-
file_path = File.join(path, "#{fn}.rb")
|
|
206
|
-
return path if File.exist? file_path
|
|
184
|
+
"#{__dir__}/rake_test_loader.rb"
|
|
207
185
|
end
|
|
208
|
-
nil
|
|
209
186
|
end
|
|
210
187
|
|
|
211
188
|
end
|