rake 10.0.4 → 10.1.0

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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -1
  3. data/doc/command_line_usage.rdoc +1 -1
  4. data/doc/rakefile.rdoc +27 -13
  5. data/doc/release_notes/rake-10.1.0.rdoc +61 -0
  6. data/install.rb +5 -15
  7. data/lib/rake/alt_system.rb +3 -4
  8. data/lib/rake/application.rb +115 -68
  9. data/lib/rake/backtrace.rb +9 -8
  10. data/lib/rake/clean.rb +27 -4
  11. data/lib/rake/contrib/ftptools.rb +6 -18
  12. data/lib/rake/contrib/sys.rb +2 -1
  13. data/lib/rake/dsl_definition.rb +2 -1
  14. data/lib/rake/ext/core.rb +2 -1
  15. data/lib/rake/ext/string.rb +1 -3
  16. data/lib/rake/file_list.rb +24 -18
  17. data/lib/rake/file_task.rb +1 -2
  18. data/lib/rake/file_utils.rb +9 -7
  19. data/lib/rake/file_utils_ext.rb +2 -1
  20. data/lib/rake/gempackagetask.rb +2 -1
  21. data/lib/rake/invocation_chain.rb +24 -18
  22. data/lib/rake/linked_list.rb +103 -0
  23. data/lib/rake/packagetask.rb +11 -6
  24. data/lib/rake/pseudo_status.rb +5 -0
  25. data/lib/rake/rdoctask.rb +2 -1
  26. data/lib/rake/ruby182_test_unit_fix.rb +4 -2
  27. data/lib/rake/runtest.rb +2 -2
  28. data/lib/rake/scope.rb +42 -0
  29. data/lib/rake/task.rb +47 -37
  30. data/lib/rake/task_arguments.rb +13 -2
  31. data/lib/rake/task_manager.rb +25 -24
  32. data/lib/rake/tasklib.rb +1 -1
  33. data/lib/rake/testtask.rb +10 -7
  34. data/lib/rake/thread_history_display.rb +1 -1
  35. data/lib/rake/thread_pool.rb +10 -4
  36. data/lib/rake/version.rb +3 -7
  37. data/lib/rake/win32.rb +3 -2
  38. data/lib/rake.rb +2 -0
  39. data/test/helper.rb +36 -470
  40. data/test/support/rakefile_definitions.rb +444 -0
  41. data/test/support/ruby_runner.rb +33 -0
  42. data/test/test_rake_application.rb +14 -12
  43. data/test/test_rake_application_options.rb +7 -5
  44. data/test/test_rake_backtrace.rb +38 -14
  45. data/test/test_rake_clean.rb +36 -4
  46. data/test/test_rake_definitions.rb +2 -3
  47. data/test/test_rake_file_creation_task.rb +2 -2
  48. data/test/test_rake_file_list.rb +23 -24
  49. data/test/test_rake_file_task.rb +4 -4
  50. data/test/test_rake_file_utils.rb +6 -2
  51. data/test/test_rake_ftp_file.rb +28 -13
  52. data/test/test_rake_functional.rb +6 -36
  53. data/test/test_rake_invocation_chain.rb +15 -3
  54. data/test/test_rake_linked_list.rb +84 -0
  55. data/test/test_rake_makefile_loader.rb +3 -1
  56. data/test/test_rake_multi_task.rb +2 -3
  57. data/test/test_rake_name_space.rb +1 -1
  58. data/test/test_rake_path_map.rb +23 -12
  59. data/test/test_rake_rake_test_loader.rb +2 -3
  60. data/test/test_rake_reduce_compat.rb +2 -6
  61. data/test/test_rake_rules.rb +47 -12
  62. data/test/test_rake_scope.rb +44 -0
  63. data/test/test_rake_task.rb +47 -11
  64. data/test/test_rake_task_arguments.rb +35 -2
  65. data/test/test_rake_task_manager.rb +16 -15
  66. data/test/test_rake_task_with_arguments.rb +2 -2
  67. data/test/test_rake_test_task.rb +1 -2
  68. data/test/test_rake_thread_pool.rb +36 -16
  69. data/test/test_thread_history_display.rb +16 -6
  70. data/test/test_trace_output.rb +2 -0
  71. metadata +10 -2
data/test/helper.rb CHANGED
@@ -11,6 +11,9 @@ require 'rake'
11
11
  require 'tmpdir'
12
12
  require File.expand_path('../file_creation', __FILE__)
13
13
 
14
+ require 'test/support/ruby_runner'
15
+ require 'test/support/rakefile_definitions'
16
+
14
17
  begin
15
18
  require_relative '../ruby/envutil'
16
19
  rescue NoMethodError, LoadError
@@ -33,26 +36,30 @@ class Rake::TestCase < MiniTest::Unit::TestCase
33
36
 
34
37
  test_dir = File.basename File.dirname File.expand_path __FILE__
35
38
 
36
- @rake_root = if test_dir == 'test' then
37
- # rake repository
38
- File.expand_path '../../', __FILE__
39
- else
40
- # ruby repository
41
- File.expand_path '../../../', __FILE__
42
- end
39
+ @rake_root =
40
+ if test_dir == 'test'
41
+ # rake repository
42
+ File.expand_path '../../', __FILE__
43
+ else
44
+ # ruby repository
45
+ File.expand_path '../../../', __FILE__
46
+ end
47
+
48
+ @verbose = ENV['VERBOSE']
43
49
 
44
50
  @rake_exec = File.join @rake_root, 'bin', 'rake'
45
51
  @rake_lib = File.join @rake_root, 'lib'
46
-
47
- @orig_PWD = Dir.pwd
48
- @orig_APPDATA = ENV['APPDATA']
49
- @orig_HOME = ENV['HOME']
50
- @orig_HOMEDRIVE = ENV['HOMEDRIVE']
51
- @orig_HOMEPATH = ENV['HOMEPATH']
52
- @orig_RAKE_COLUMNS = ENV['RAKE_COLUMNS']
53
- @orig_RAKE_SYSTEM = ENV['RAKE_SYSTEM']
54
- @orig_RAKEOPT = ENV['RAKEOPT']
55
- @orig_USERPROFILE = ENV['USERPROFILE']
52
+ @ruby_options = ["-I#{@rake_lib}", "-I."]
53
+
54
+ @orig_pwd = Dir.pwd
55
+ @orig_appdata = ENV['APPDATA']
56
+ @orig_home = ENV['HOME']
57
+ @orig_homedrive = ENV['HOMEDRIVE']
58
+ @orig_homepath = ENV['HOMEPATH']
59
+ @orig_rake_columns = ENV['RAKE_COLUMNS']
60
+ @orig_rake_system = ENV['RAKE_SYSTEM']
61
+ @orig_rakeopt = ENV['RAKEOPT']
62
+ @orig_userprofile = ENV['USERPROFILE']
56
63
  ENV.delete 'RAKE_COLUMNS'
57
64
  ENV.delete 'RAKE_SYSTEM'
58
65
  ENV.delete 'RAKEOPT'
@@ -70,22 +77,22 @@ class Rake::TestCase < MiniTest::Unit::TestCase
70
77
  end
71
78
 
72
79
  def teardown
73
- Dir.chdir @orig_PWD
80
+ Dir.chdir @orig_pwd
74
81
  FileUtils.rm_rf @tempdir
75
82
 
76
- if @orig_APPDATA then
77
- ENV['APPDATA'] = @orig_APPDATA
83
+ if @orig_appdata
84
+ ENV['APPDATA'] = @orig_appdata
78
85
  else
79
86
  ENV.delete 'APPDATA'
80
87
  end
81
88
 
82
- ENV['HOME'] = @orig_HOME
83
- ENV['HOMEDRIVE'] = @orig_HOMEDRIVE
84
- ENV['HOMEPATH'] = @orig_HOMEPATH
85
- ENV['RAKE_COLUMNS'] = @orig_RAKE_COLUMNS
86
- ENV['RAKE_SYSTEM'] = @orig_RAKE_SYSTEM
87
- ENV['RAKEOPT'] = @orig_RAKEOPT
88
- ENV['USERPROFILE'] = @orig_USERPROFILE
89
+ ENV['HOME'] = @orig_home
90
+ ENV['HOMEDRIVE'] = @orig_homedrive
91
+ ENV['HOMEPATH'] = @orig_homepath
92
+ ENV['RAKE_COLUMNS'] = @orig_rake_columns
93
+ ENV['RAKE_SYSTEM'] = @orig_rake_system
94
+ ENV['RAKEOPT'] = @orig_rakeopt
95
+ ENV['USERPROFILE'] = @orig_userprofile
89
96
  end
90
97
 
91
98
  def ignore_deprecations
@@ -111,452 +118,11 @@ end
111
118
  ENV['RAKE_SYSTEM'] = @system_dir
112
119
  end
113
120
 
114
- def rakefile contents
121
+ def rakefile(contents)
115
122
  open 'Rakefile', 'w' do |io|
116
123
  io << contents
117
124
  end
118
125
  end
119
126
 
120
- def rakefile_access
121
- rakefile <<-ACCESS
122
- TOP_LEVEL_CONSTANT = 0
123
-
124
- def a_top_level_function
125
- end
126
-
127
- task :default => [:work, :obj, :const]
128
-
129
- task :work do
130
- begin
131
- a_top_level_function
132
- puts "GOOD:M Top level methods can be called in tasks"
133
- rescue NameError => ex
134
- puts "BAD:M Top level methods can not be called in tasks"
135
- end
136
- end
137
-
138
- # TODO: remove `disabled_' when DeprecatedObjectDSL removed
139
- task :obj
140
- task :disabled_obj do
141
- begin
142
- Object.new.instance_eval { task :xyzzy }
143
- puts "BAD:D Rake DSL are polluting objects"
144
- rescue StandardError => ex
145
- puts "GOOD:D Rake DSL are not polluting objects"
146
- end
147
- end
148
-
149
- task :const do
150
- begin
151
- TOP_LEVEL_CONSTANT
152
- puts "GOOD:C Top level constants are available in tasks"
153
- rescue StandardError => ex
154
- puts "BAD:C Top level constants are NOT available in tasks"
155
- end
156
- end
157
- ACCESS
158
- end
159
-
160
- def rakefile_chains
161
- rakefile <<-DEFAULT
162
- task :default => "play.app"
163
-
164
- file "play.scpt" => "base" do |t|
165
- cp t.prerequisites.first, t.name
166
- end
167
-
168
- rule ".app" => ".scpt" do |t|
169
- cp t.source, t.name
170
- end
171
-
172
- file 'base' do
173
- touch 'base'
174
- end
175
- DEFAULT
176
- end
177
-
178
- def rakefile_comments
179
- rakefile <<-COMMENTS
180
- # comment for t1
181
- task :t1 do
182
- end
183
-
184
- # no comment or task because there's a blank line
185
-
186
- task :t2 do
187
- end
188
-
189
- desc "override comment for t3"
190
- # this is not the description
191
- multitask :t3 do
192
- end
193
-
194
- # this is not the description
195
- desc "override comment for t4"
196
- file :t4 do
197
- end
198
- COMMENTS
199
- end
200
-
201
- def rakefile_default
202
- rakefile <<-DEFAULT
203
- if ENV['TESTTOPSCOPE']
204
- puts "TOPSCOPE"
205
- end
206
-
207
- task :default do
208
- puts "DEFAULT"
209
- end
210
-
211
- task :other => [:default] do
212
- puts "OTHER"
213
- end
214
-
215
- task :task_scope do
216
- if ENV['TESTTASKSCOPE']
217
- puts "TASKSCOPE"
218
- end
219
- end
220
- DEFAULT
221
- end
222
-
223
- def rakefile_dryrun
224
- rakefile <<-DRYRUN
225
- task :default => ["temp_main"]
226
-
227
- file "temp_main" => [:all_apps] do touch "temp_main" end
228
-
229
- task :all_apps => [:one, :two]
230
- task :one => ["temp_one"]
231
- task :two => ["temp_two"]
232
-
233
- file "temp_one" do |t|
234
- touch "temp_one"
235
- end
236
- file "temp_two" do |t|
237
- touch "temp_two"
238
- end
239
-
240
- task :clean do
241
- ["temp_one", "temp_two", "temp_main"].each do |file|
242
- rm_f file
243
- end
244
- end
245
- DRYRUN
246
-
247
- FileUtils.touch 'temp_main'
248
- FileUtils.touch 'temp_two'
249
- end
250
-
251
- def rakefile_extra
252
- rakefile 'task :default'
253
-
254
- FileUtils.mkdir_p 'rakelib'
255
-
256
- open File.join('rakelib', 'extra.rake'), 'w' do |io|
257
- io << <<-EXTRA_RAKE
258
- # Added for testing
259
-
260
- namespace :extra do
261
- desc "An Extra Task"
262
- task :extra do
263
- puts "Read all about it"
264
- end
265
- end
266
- EXTRA_RAKE
267
- end
268
- end
269
-
270
- def rakefile_file_creation
271
- rakefile <<-'FILE_CREATION'
272
- N = 2
273
-
274
- task :default => :run
275
-
276
- BUILD_DIR = 'build'
277
- task :clean do
278
- rm_rf 'build'
279
- rm_rf 'src'
280
- end
281
-
282
- task :run
283
-
284
- TARGET_DIR = 'build/copies'
285
-
286
- FileList['src/*'].each do |src|
287
- directory TARGET_DIR
288
- target = File.join TARGET_DIR, File.basename(src)
289
- file target => [src, TARGET_DIR] do
290
- cp src, target
291
- # sleep 3 if src !~ /foo#{N-1}$/ # I'm commenting out this sleep, it doesn't seem to do anything.
292
- end
293
- task :run => target
294
- end
295
-
296
- task :prep => :clean do
297
- mkdir_p 'src'
298
- N.times do |n|
299
- touch "src/foo#{n}"
300
- end
301
- end
302
- FILE_CREATION
303
- end
304
-
305
- def rakefile_imports
306
- rakefile <<-IMPORTS
307
- require 'rake/loaders/makefile'
308
-
309
- task :default
310
-
311
- task :other do
312
- puts "OTHER"
313
- end
314
-
315
- file "dynamic_deps" do |t|
316
- open(t.name, "w") do |f| f.puts "puts 'DYNAMIC'" end
317
- end
318
-
319
- import "dynamic_deps"
320
- import "static_deps"
321
- import "static_deps"
322
- import "deps.mf"
323
- puts "FIRST"
324
- IMPORTS
325
-
326
- open 'deps.mf', 'w' do |io|
327
- io << <<-DEPS
328
- default: other
329
- DEPS
330
- end
331
-
332
- open "static_deps", "w" do |f|
333
- f.puts 'puts "STATIC"'
334
- end
335
- end
336
-
337
- def rakefile_multidesc
338
- rakefile <<-MULTIDESC
339
- task :b
340
-
341
- desc "A"
342
- task :a
343
-
344
- desc "B"
345
- task :b
346
-
347
- desc "A2"
348
- task :a
349
-
350
- task :c
351
-
352
- desc "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
353
- task :d
354
- MULTIDESC
355
- end
356
-
357
- def rakefile_namespace
358
- rakefile <<-NAMESPACE
359
- desc "copy"
360
- task :copy do
361
- puts "COPY"
362
- end
363
-
364
- namespace "nest" do
365
- desc "nest copy"
366
- task :copy do
367
- puts "NEST COPY"
368
- end
369
- task :xx => :copy
370
- end
371
-
372
- anon_ns = namespace do
373
- desc "anonymous copy task"
374
- task :copy do
375
- puts "ANON COPY"
376
- end
377
- end
378
-
379
- desc "Top level task to run the anonymous version of copy"
380
- task :anon => anon_ns[:copy]
381
-
382
- namespace "very" do
383
- namespace "nested" do
384
- task "run" => "rake:copy"
385
- end
386
- end
387
-
388
- namespace "a" do
389
- desc "Run task in the 'a' namespace"
390
- task "run" do
391
- puts "IN A"
392
- end
393
- end
394
-
395
- namespace "b" do
396
- desc "Run task in the 'b' namespace"
397
- task "run" => "a:run" do
398
- puts "IN B"
399
- end
400
- end
401
-
402
- namespace "file1" do
403
- file "xyz.rb" do
404
- puts "XYZ1"
405
- end
406
- end
407
-
408
- namespace "file2" do
409
- file "xyz.rb" do
410
- puts "XYZ2"
411
- end
412
- end
413
-
414
- namespace "scopedep" do
415
- task :prepare do
416
- touch "scopedep.rb"
417
- puts "PREPARE"
418
- end
419
- file "scopedep.rb" => [:prepare] do
420
- puts "SCOPEDEP"
421
- end
422
- end
423
- NAMESPACE
424
- end
425
-
426
- def rakefile_nosearch
427
- FileUtils.touch 'dummy'
428
- end
429
-
430
- def rakefile_rakelib
431
- FileUtils.mkdir_p 'rakelib'
432
-
433
- Dir.chdir 'rakelib' do
434
- open 'test1.rb', 'w' do |io|
435
- io << <<-TEST1
436
- task :default do
437
- puts "TEST1"
438
- end
439
- TEST1
440
- end
441
-
442
- open 'test2.rake', 'w' do |io|
443
- io << <<-TEST1
444
- task :default do
445
- puts "TEST2"
446
- end
447
- TEST1
448
- end
449
- end
450
- end
451
-
452
- def rakefile_rbext
453
- open 'rakefile.rb', 'w' do |io|
454
- io << 'task :default do puts "OK" end'
455
- end
456
- end
457
-
458
- def rakefile_unittest
459
- rakefile '# Empty Rakefile for Unit Test'
460
-
461
- readme = File.join 'subdir', 'README'
462
- FileUtils.mkdir_p File.dirname readme
463
-
464
- FileUtils.touch readme
465
- end
466
-
467
- def rakefile_verbose
468
- rakefile <<-VERBOSE
469
- task :standalone_verbose_true do
470
- verbose true
471
- sh "#{RUBY} -e '0'"
472
- end
473
-
474
- task :standalone_verbose_false do
475
- verbose false
476
- sh "#{RUBY} -e '0'"
477
- end
478
-
479
- task :inline_verbose_default do
480
- sh "#{RUBY} -e '0'"
481
- end
482
-
483
- task :inline_verbose_false do
484
- sh "#{RUBY} -e '0'", :verbose => false
485
- end
486
-
487
- task :inline_verbose_true do
488
- sh "#{RUBY} -e '0'", :verbose => true
489
- end
490
-
491
- task :block_verbose_true do
492
- verbose(true) do
493
- sh "#{RUBY} -e '0'"
494
- end
495
- end
496
-
497
- task :block_verbose_false do
498
- verbose(false) do
499
- sh "#{RUBY} -e '0'"
500
- end
501
- end
502
- VERBOSE
503
- end
504
-
505
- def rakefile_test_signal
506
- rakefile <<-TEST_SIGNAL
507
- require 'rake/testtask'
508
-
509
- Rake::TestTask.new(:a) do |t|
510
- t.test_files = ['a_test.rb']
511
- end
512
-
513
- Rake::TestTask.new(:b) do |t|
514
- t.test_files = ['b_test.rb']
515
- end
516
-
517
- task :test do
518
- Rake::Task[:a].invoke
519
- Rake::Task[:b].invoke
520
- end
521
-
522
- task :default => :test
523
- TEST_SIGNAL
524
- open 'a_test.rb', 'w' do |io|
525
- io << 'puts "ATEST"' << "\n"
526
- io << '$stdout.flush' << "\n"
527
- io << 'Process.kill("TERM", $$)' << "\n"
528
- end
529
- open 'b_test.rb', 'w' do |io|
530
- io << 'puts "BTEST"' << "\n"
531
- io << '$stdout.flush' << "\n"
532
- end
533
- end
534
-
535
- def rakefile_failing_test_task
536
- rakefile <<-TEST_TASK
537
- require 'rake/testtask'
538
-
539
- task :default => :test
540
- Rake::TestTask.new(:test) do |t|
541
- t.test_files = ['a_test.rb']
542
- end
543
- TEST_TASK
544
- open 'a_test.rb', 'w' do |io|
545
- io << "require 'minitest/autorun'\n"
546
- io << "class ExitTaskTest < MiniTest::Unit::TestCase\n"
547
- io << " def test_exit\n"
548
- io << " assert false, 'this should fail'\n"
549
- io << " end\n"
550
- io << "end\n"
551
- end
552
- end
553
-
554
- def rakefile_stand_alone_filelist
555
- open 'stand_alone_filelist.rb', 'w' do |io|
556
- io << "require 'rake/file_list'\n"
557
- io << "FL = Rake::FileList['*.rb']\n"
558
- io << "puts FL\n"
559
- end
560
- end
561
-
127
+ include RakefileDefinitions
562
128
  end