rake 0.4.8 → 0.7.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.
Files changed (77) hide show
  1. data/CHANGES +183 -0
  2. data/README +47 -14
  3. data/Rakefile +212 -44
  4. data/bin/rake +2 -3
  5. data/doc/jamis.rb +591 -0
  6. data/doc/rake.1.gz +0 -0
  7. data/doc/rakefile.rdoc +180 -3
  8. data/doc/release_notes/rake-0.4.14.rdoc +23 -0
  9. data/doc/release_notes/rake-0.4.15.rdoc +35 -0
  10. data/doc/release_notes/rake-0.5.0.rdoc +53 -0
  11. data/doc/release_notes/rake-0.5.3.rdoc +78 -0
  12. data/doc/release_notes/rake-0.5.4.rdoc +46 -0
  13. data/doc/release_notes/rake-0.6.0.rdoc +141 -0
  14. data/doc/release_notes/rake-0.7.0.rdoc +119 -0
  15. data/doc/release_notes/rake-0.7.1.rdoc +59 -0
  16. data/doc/release_notes/rake-0.7.2.rdoc +121 -0
  17. data/doc/release_notes/rake-0.7.3.rdoc +47 -0
  18. data/lib/rake/classic_namespace.rb +8 -0
  19. data/lib/rake/clean.rb +3 -1
  20. data/lib/rake/contrib/ftptools.rb +21 -21
  21. data/lib/rake/contrib/rubyforgepublisher.rb +3 -3
  22. data/lib/rake/contrib/sshpublisher.rb +1 -1
  23. data/lib/rake/contrib/sys.rb +20 -21
  24. data/lib/rake/gempackagetask.rb +12 -9
  25. data/lib/rake/loaders/makefile.rb +40 -0
  26. data/lib/rake/packagetask.rb +65 -33
  27. data/lib/rake/rake_test_loader.rb +5 -0
  28. data/lib/rake/rdoctask.rb +34 -15
  29. data/lib/rake/ruby182_test_unit_fix.rb +23 -0
  30. data/lib/rake/runtest.rb +4 -4
  31. data/lib/rake/tasklib.rb +3 -9
  32. data/lib/rake/testtask.rb +67 -24
  33. data/lib/rake.rb +1600 -552
  34. data/test/capture_stdout.rb +26 -0
  35. data/test/data/chains/Rakefile +15 -0
  36. data/test/data/default/Rakefile +19 -0
  37. data/test/data/dryrun/Rakefile +22 -0
  38. data/test/data/file_creation_task/Rakefile +30 -0
  39. data/test/data/imports/Rakefile +19 -0
  40. data/test/data/imports/deps.mf +1 -0
  41. data/test/data/multidesc/Rakefile +14 -0
  42. data/test/data/namespace/Rakefile +57 -0
  43. data/test/data/rakelib/test1.rb +3 -0
  44. data/test/data/sample.mf +9 -0
  45. data/test/data/unittest/Rakefile +1 -0
  46. data/test/filecreation.rb +18 -10
  47. data/test/functional.rb +3 -72
  48. data/test/reqfile.rb +3 -0
  49. data/test/reqfile2.rb +3 -0
  50. data/test/session_functional.rb +218 -0
  51. data/test/shellcommand.rb +3 -0
  52. data/test/test_application.rb +425 -0
  53. data/test/{testclean.rb → test_clean.rb} +1 -0
  54. data/test/test_definitions.rb +82 -0
  55. data/test/test_earlytime.rb +35 -0
  56. data/test/test_file_creation_task.rb +62 -0
  57. data/test/test_file_task.rb +139 -0
  58. data/test/test_filelist.rb +574 -0
  59. data/test/test_fileutils.rb +230 -0
  60. data/test/test_makefile_loader.rb +23 -0
  61. data/test/test_multitask.rb +45 -0
  62. data/test/test_namespace.rb +32 -0
  63. data/test/test_package_task.rb +130 -0
  64. data/test/test_pathmap.rb +188 -0
  65. data/test/test_rake.rb +34 -0
  66. data/test/test_require.rb +33 -0
  67. data/test/test_rules.rb +305 -0
  68. data/test/test_task_manager.rb +148 -0
  69. data/test/test_tasks.rb +146 -0
  70. data/test/{testtesttask.rb → test_test_task.rb} +5 -0
  71. data/test/test_top_level_functions.rb +79 -0
  72. metadata +134 -68
  73. data/test/testfilelist.rb +0 -255
  74. data/test/testfileutils.rb +0 -55
  75. data/test/testpackagetask.rb +0 -81
  76. data/test/testtasks.rb +0 -371
  77. /data/test/{testftp.rb → test_ftp.rb} +0 -0
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'stringio'
4
+
5
+ # Mix-in for capturing standard output.
6
+ module CaptureStdout
7
+ def capture_stdout
8
+ s = StringIO.new
9
+ oldstdout = $stdout
10
+ $stdout = s
11
+ yield
12
+ s.string
13
+ ensure
14
+ $stdout = oldstdout
15
+ end
16
+
17
+ def capture_stderr
18
+ s = StringIO.new
19
+ oldstderr = $stderr
20
+ $stderr = s
21
+ yield
22
+ s.string
23
+ ensure
24
+ $stderr = oldstderr
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ # -*- ruby -*-
2
+
3
+ task :default => "play.app"
4
+
5
+ file "play.scpt" => "base" do |t|
6
+ cp t.prerequisites.first, t.name
7
+ end
8
+
9
+ rule ".app" => ".scpt" do |t|
10
+ cp t.source, t.name
11
+ end
12
+
13
+ file 'base' do
14
+ touch 'base'
15
+ end
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ if ENV['TESTTOPSCOPE']
4
+ puts "TOPSCOPE"
5
+ end
6
+
7
+ task :default do
8
+ puts "DEFAULT"
9
+ end
10
+
11
+ task :other => [:default] do
12
+ puts "OTHER"
13
+ end
14
+
15
+ task :task_scope do
16
+ if ENV['TESTTASKSCOPE']
17
+ puts "TASKSCOPE"
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ #
2
+
3
+ task :default => ["temp_main"]
4
+
5
+ file "temp_main" => [:all_apps] do touch "temp_main" end
6
+
7
+ task :all_apps => [:one, :two]
8
+ task :one => ["temp_one"]
9
+ task :two => ["temp_two"]
10
+
11
+ file "temp_one" do |t|
12
+ touch "temp_one"
13
+ end
14
+ file "temp_two" do |t|
15
+ touch "temp_two"
16
+ end
17
+
18
+ task :clean do
19
+ ["temp_one", "temp_two", "temp_main"].each do |file|
20
+ rm_f file
21
+ end
22
+ end
@@ -0,0 +1,30 @@
1
+ N = 2
2
+
3
+ task :default => :run
4
+
5
+ BUILD_DIR = 'build'
6
+ task :clean do
7
+ rm_rf 'build'
8
+ rm_rf 'src'
9
+ end
10
+
11
+ task :run
12
+
13
+ TARGET_DIR = 'build/copies'
14
+
15
+ FileList['src/*'].each do |src|
16
+ directory TARGET_DIR
17
+ target = File.join TARGET_DIR, File.basename(src)
18
+ file target => [src, TARGET_DIR] do
19
+ cp src, target
20
+ sleep 3 if src !~ /foo#{N-1}$/
21
+ end
22
+ task :run => target
23
+ end
24
+
25
+ task :prep => :clean do
26
+ mkdir_p 'src'
27
+ N.times do |n|
28
+ touch "src/foo#{n}"
29
+ end
30
+ end
@@ -0,0 +1,19 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rake/loaders/makefile'
4
+
5
+ task :default
6
+
7
+ task :other do
8
+ puts "OTHER"
9
+ end
10
+
11
+ file "dynamic_deps" do |t|
12
+ open(t.name, "w") do |f| f.puts "puts 'DYNAMIC'" end
13
+ end
14
+
15
+ import "dynamic_deps"
16
+ import "static_deps"
17
+ import "static_deps"
18
+ import "deps.mf"
19
+ puts "FIRST"
@@ -0,0 +1 @@
1
+ default: other
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ task :b
4
+
5
+ desc "A"
6
+ task :a
7
+
8
+ desc "B"
9
+ task :b
10
+
11
+ desc "A2"
12
+ task :a
13
+
14
+ task :c
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ desc "copy"
4
+ task :copy do
5
+ puts "COPY"
6
+ end
7
+
8
+ namespace "nest" do
9
+ desc "nest copy"
10
+ task :copy do
11
+ puts "NEST COPY"
12
+ end
13
+ task :xx => :copy
14
+ end
15
+
16
+ anon_ns = namespace do
17
+ desc "anonymous copy task"
18
+ task :copy do
19
+ puts "ANON COPY"
20
+ end
21
+ end
22
+
23
+ desc "Top level task to run the anonymous version of copy"
24
+ task :anon => anon_ns[:copy]
25
+
26
+ namespace "very" do
27
+ namespace "nested" do
28
+ task "run" => "rake:copy"
29
+ end
30
+ end
31
+
32
+ namespace "a" do
33
+ desc "Run task in the 'a' namespace"
34
+ task "run" do
35
+ puts "IN A"
36
+ end
37
+ end
38
+
39
+ namespace "b" do
40
+ desc "Run task in the 'b' namespace"
41
+ task "run" => "a:run" do
42
+ puts "IN B"
43
+ end
44
+ end
45
+
46
+ namespace "file1" do
47
+ file "xyz.rb" do
48
+ puts "XYZ1"
49
+ end
50
+ end
51
+
52
+ namespace "file2" do
53
+ file "xyz.rb" do
54
+ puts "XYZ2"
55
+ end
56
+ end
57
+
@@ -0,0 +1,3 @@
1
+ task :default do
2
+ puts "TEST1"
3
+ end
@@ -0,0 +1,9 @@
1
+ # Comments
2
+ a: a1 a2 a3 a4
3
+ b: b1 b2 b3 \
4
+ b4 b5 b6\
5
+ # Mid: Comment
6
+ b7
7
+ a: a5 a6 a7
8
+ c: c1
9
+ d: d1 d2 \
@@ -0,0 +1 @@
1
+ # Empty Rakefile for Unit Test
data/test/filecreation.rb CHANGED
@@ -3,24 +3,32 @@
3
3
  require 'ftools'
4
4
 
5
5
  module FileCreation
6
- def create_timed_files(oldfile, newfile)
7
- return if File.exist?(oldfile) && File.exist?(newfile)
6
+ OLDFILE = "testdata/old"
7
+ NEWFILE = "testdata/new"
8
+
9
+ def create_timed_files(oldfile, *newfiles)
10
+ return if File.exist?(oldfile) && newfiles.all? { |newfile| File.exist?(newfile) }
8
11
  old_time = create_file(oldfile)
9
- while create_file(newfile) <= old_time
10
- sleep(0.1)
11
- File.delete(newfile) rescue nil
12
+ newfiles.each do |newfile|
13
+ while create_file(newfile) <= old_time
14
+ sleep(0.1)
15
+ File.delete(newfile) rescue nil
16
+ end
12
17
  end
13
18
  end
14
19
 
15
- def create_file(name)
16
- dirname = File.dirname(name)
20
+ def create_dir(dirname)
17
21
  FileUtils.mkdir_p(dirname) unless File.exist?(dirname)
18
- open(name, "w") {|f| f.puts "HI" } unless File.exist?(name)
19
- File.new(name).mtime
22
+ File.stat(dirname).mtime
23
+ end
24
+
25
+ def create_file(name)
26
+ create_dir(File.dirname(name))
27
+ FileUtils.touch(name) unless File.exist?(name)
28
+ File.stat(name).mtime
20
29
  end
21
30
 
22
31
  def delete_file(name)
23
32
  File.delete(name) rescue nil
24
33
  end
25
34
  end
26
-
data/test/functional.rb CHANGED
@@ -2,81 +2,12 @@
2
2
 
3
3
  begin
4
4
  require 'rubygems'
5
- require_gem 'session'
5
+ gem 'session'
6
6
  rescue LoadError
7
7
  puts "UNABLE TO RUN FUNCTIONAL TESTS"
8
8
  puts "No Session Found"
9
9
  end
10
10
 
11
- require 'test/unit'
12
- require 'fileutils'
13
-
14
- class FunctionalTest < Test::Unit::TestCase
15
- def setup
16
- @rake_path = File.expand_path("bin/rake")
17
- lib_path = File.expand_path("lib")
18
- @ruby_options = "-I#{lib_path} -I."
19
- @verbose = true if ENV['VERBOSE']
20
- end
21
-
22
- def test_rake_default
23
- Dir.chdir("test/data/default") do rake end
24
- assert_match /^DEFAULT$/, @out
25
- assert_status
26
- end
27
-
28
- def test_rake_error_on_bad_task
29
- Dir.chdir("test/data/default") do rake "xyz" end
30
- assert_match /rake aborted/, @out
31
- assert_status(1)
32
- end
33
-
34
- def test_env_availabe_at_top_scope
35
- Dir.chdir("test/data/default") do rake "TESTTOPSCOPE=1" end
36
- assert_match /^TOPSCOPE$/, @out
37
- assert_status
38
- end
39
-
40
- def test_env_availabe_at_task_scope
41
- Dir.chdir("test/data/default") do rake "TESTTASKSCOPE=1 task_scope" end
42
- assert_match /^TASKSCOPE$/, @out
43
- assert_status
44
- end
45
-
46
- def test_multi_desc
47
- Dir.chdir("test/data/multidesc") do rake "-T" end
48
- assert_match %r{^rake a *# A / A2 *$}, @out
49
- assert_match %r{^rake b *# B *$}, @out
50
- assert_no_match %r{^rake c}, @out
51
- end
52
-
53
- def test_rbext
54
- Dir.chdir("test/data/rbext") do rake "-N" end
55
- assert_match %r{^OK$}, @out
56
- end
57
-
58
- def test_nosearch
59
- Dir.chdir("test/data/nosearch") do rake "-N" end
60
- assert_match %r{^No Rakefile found}, @out
61
- end
62
-
63
- private
64
-
65
- def rake(options="")
66
- shell = Session::Shell.new
67
- command = "ruby #{@ruby_options} #{@rake_path} #{options}"
68
- puts "COMMAND: [#{command}]" if @verbose
69
- @out, @err = shell.execute command
70
- @status = shell.exit_status
71
- puts "STATUS: [#{@status}]" if @verbose
72
- puts "OUTPUT: [#{@out}]" if @verbose
73
- puts "ERROR: [#{@err}]" if @verbose
74
- puts "PWD: [#{Dir.pwd}]" if @verbose
75
- shell.close
76
- end
77
-
78
- def assert_status(expected_status=0)
79
- assert_equal expected_status, @status
80
- end
81
-
11
+ if defined?(Session)
12
+ require 'test/session_functional'
82
13
  end
data/test/reqfile.rb ADDED
@@ -0,0 +1,3 @@
1
+ # For --require testing
2
+
3
+ TESTING_REQUIRE << 1
data/test/reqfile2.rb ADDED
@@ -0,0 +1,3 @@
1
+ # For --require testing
2
+
3
+ TESTING_REQUIRE << 2
@@ -0,0 +1,218 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'fileutils'
5
+
6
+ # Version 2.1.9 of session has a bug where the @debug instance
7
+ # variable is not initialized, causing warning messages. This snippet
8
+ # of code fixes that problem.
9
+ module Session
10
+ class AbstractSession
11
+ alias old_initialize initialize
12
+ def initialize(*args)
13
+ @debug = nil
14
+ old_initialize(*args)
15
+ end
16
+ end
17
+ end
18
+
19
+ class FunctionalTest < Test::Unit::TestCase
20
+ def setup
21
+ @rake_path = File.expand_path("bin/rake")
22
+ lib_path = File.expand_path("lib")
23
+ @ruby_options = "-I#{lib_path} -I."
24
+ @verbose = ! ENV['VERBOSE'].nil?
25
+ if @verbose
26
+ puts
27
+ puts
28
+ puts "--------------------------------------------------------------------"
29
+ puts name
30
+ puts "--------------------------------------------------------------------"
31
+ end
32
+ end
33
+
34
+ def test_rake_default
35
+ Dir.chdir("test/data/default") do rake end
36
+ assert_match(/^DEFAULT$/, @out)
37
+ assert_status
38
+ end
39
+
40
+ def test_rake_error_on_bad_task
41
+ Dir.chdir("test/data/default") do rake "xyz" end
42
+ assert_match(/rake aborted/, @err)
43
+ assert_status(1)
44
+ end
45
+
46
+ def test_env_availabe_at_top_scope
47
+ Dir.chdir("test/data/default") do rake "TESTTOPSCOPE=1" end
48
+ assert_match(/^TOPSCOPE$/, @out)
49
+ assert_status
50
+ end
51
+
52
+ def test_env_availabe_at_task_scope
53
+ Dir.chdir("test/data/default") do rake "TESTTASKSCOPE=1 task_scope" end
54
+ assert_match(/^TASKSCOPE$/, @out)
55
+ assert_status
56
+ end
57
+
58
+ def test_multi_desc
59
+ Dir.chdir("test/data/multidesc") do rake "-T" end
60
+ assert_match %r{^rake a *# A / A2 *$}, @out
61
+ assert_match %r{^rake b *# B *$}, @out
62
+ assert_no_match %r{^rake c}, @out
63
+ end
64
+
65
+ def test_rbext
66
+ Dir.chdir("test/data/rbext") do rake "-N" end
67
+ assert_match %r{^OK$}, @out
68
+ end
69
+
70
+ def test_nosearch
71
+ Dir.chdir("test/data/nosearch") do rake "-N" end
72
+ assert_match %r{^No Rakefile found}, @err
73
+ end
74
+
75
+ def test_dry_run
76
+ Dir.chdir("test/data/default") do rake "-n", "other" end
77
+ assert_match %r{Execute \(dry run\) default}, @out
78
+ assert_match %r{Execute \(dry run\) other}, @out
79
+ assert_no_match %r{DEFAULT}, @out
80
+ assert_no_match %r{OTHER}, @out
81
+ end
82
+
83
+ # Test for the trace/dry_run bug found by Brian Chandler
84
+ def test_dry_run_bug
85
+ Dir.chdir("test/data/dryrun") do rake end
86
+ FileUtils.rm_f "test/data/dryrun/temp_one"
87
+ Dir.chdir("test/data/dryrun") do rake "--dry-run" end
88
+ assert_no_match(/No such file/, @out)
89
+ assert_status
90
+ end
91
+
92
+ # Test for the trace/dry_run bug found by Brian Chandler
93
+ def test_trace_bug
94
+ Dir.chdir("test/data/dryrun") do rake end
95
+ FileUtils.rm_f "test/data/dryrun/temp_one"
96
+ Dir.chdir("test/data/dryrun") do rake "--trace" end
97
+ assert_no_match(/No such file/, @out)
98
+ assert_status
99
+ end
100
+
101
+ def test_imports
102
+ open("test/data/imports/static_deps", "w") do |f|
103
+ f.puts 'puts "STATIC"'
104
+ end
105
+ FileUtils.rm_f "test/data/imports/dynamic_deps"
106
+ Dir.chdir("test/data/imports") do rake end
107
+ assert File.exist?("test/data/imports/dynamic_deps"),
108
+ "'dynamic_deps' file should exist"
109
+ assert_match(/^FIRST$\s+^DYNAMIC$\s+^STATIC$\s+^OTHER$/, @out)
110
+ assert_status
111
+ FileUtils.rm_f "test/data/imports/dynamic_deps"
112
+ FileUtils.rm_f "test/data/imports/static_deps"
113
+ end
114
+
115
+ def test_rules_chaining_to_file_task
116
+ remove_chaining_files
117
+ Dir.chdir("test/data/chains") do rake end
118
+ assert File.exist?("test/data/chains/play.app"),
119
+ "'play.app' file should exist"
120
+ assert_status
121
+ remove_chaining_files
122
+ end
123
+
124
+ def test_file_creation_task
125
+ Dir.chdir("test/data/file_creation_task") do
126
+ rake "prep"
127
+ rake "run"
128
+ rake "run"
129
+ assert(@err !~ /^cp src/, "Should not recopy data")
130
+ end
131
+ end
132
+
133
+ def test_dash_f_with_no_arg_foils_rakefile_lookup
134
+ rake "-I test/data/rakelib -rtest1 -f"
135
+ assert_match(/^TEST1$/, @out)
136
+ end
137
+
138
+ def test_dot_rake_files_can_be_laoded_with_dash_r
139
+ rake "-I test/data/rakelib -rtest2 -f"
140
+ assert_match(/^TEST2$/, @out)
141
+ end
142
+
143
+ def test_can_invoke_task_in_toplevel_namespace
144
+ Dir.chdir("test/data/namespace") do
145
+ rake "copy"
146
+ assert_match(/^COPY$/, @out)
147
+ end
148
+ end
149
+
150
+ def test_can_invoke_task_in_nested_namespace
151
+ Dir.chdir("test/data/namespace") do
152
+ rake "nest:copy"
153
+ assert_match(/^NEST COPY$/, @out)
154
+ end
155
+ end
156
+
157
+ def test_tasks_can_reference_task_in_same_namespace
158
+ Dir.chdir("test/data/namespace") do
159
+ rake "nest:xx"
160
+ assert_match(/^NEST COPY$/m, @out)
161
+ end
162
+ end
163
+
164
+ def test_tasks_can_reference_task_in_other_namespaces
165
+ Dir.chdir("test/data/namespace") do
166
+ rake "b:run"
167
+ assert_match(/^IN A\nIN B$/m, @out)
168
+ end
169
+ end
170
+
171
+ def test_anonymous_tasks_can_be_invoked_indirectly
172
+ Dir.chdir("test/data/namespace") do
173
+ rake "anon"
174
+ assert_match(/^ANON COPY$/m, @out)
175
+ end
176
+ end
177
+
178
+ def test_rake_namespace_refers_to_toplevel
179
+ Dir.chdir("test/data/namespace") do
180
+ rake "very:nested:run"
181
+ assert_match(/^COPY$/m, @out)
182
+ end
183
+ end
184
+
185
+ def test_file_task_are_not_scoped_by_namespaces
186
+ Dir.chdir("test/data/namespace") do
187
+ rake "xyz.rb"
188
+ assert_match(/^XYZ1\nXYZ2$/m, @out)
189
+ end
190
+ end
191
+
192
+ private
193
+
194
+ def remove_chaining_files
195
+ %w(play.scpt play.app base).each do |fn|
196
+ FileUtils.rm_f File.join("test/data/chains", fn)
197
+ end
198
+ end
199
+
200
+ def rake(*option_list)
201
+ options = option_list.join(' ')
202
+ shell = Session::Shell.new
203
+ command = "ruby #{@ruby_options} #{@rake_path} #{options}"
204
+ puts "COMMAND: [#{command}]" if @verbose
205
+ @out, @err = shell.execute command
206
+ @status = shell.exit_status
207
+ puts "STATUS: [#{@status}]" if @verbose
208
+ puts "OUTPUT: [#{@out}]" if @verbose
209
+ puts "ERROR: [#{@err}]" if @verbose
210
+ puts "PWD: [#{Dir.pwd}]" if @verbose
211
+ shell.close
212
+ end
213
+
214
+ def assert_status(expected_status=0)
215
+ assert_equal expected_status, @status
216
+ end
217
+
218
+ end
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ exit((ARGV[0] || "0").to_i)