drake 0.8.7.0.2.3 → 0.8.7.0.2.4

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.
@@ -1,6 +1,10 @@
1
1
 
2
2
  = Drake Changelog
3
3
 
4
+ == Version 0.8.7.0.2.4
5
+
6
+ * Fix for kite-shaped dep graphs; based on a patch by Heath Kehoe.
7
+
4
8
  == Version 0.8.7.0.2.3
5
9
 
6
10
  * update from mainline branch
@@ -13,9 +13,9 @@ task :drake_prerelease => [:clobber, :gemspec] do
13
13
  unless `git status` =~ %r!nothing to commit \(working directory clean\)!
14
14
  raise "Directory not clean"
15
15
  end
16
- unless `git pull` =~ %r!Already up-to-date!
17
- raise "New stuff from remote repository"
18
- end
16
+ #unless `git pull` =~ %r!Already up-to-date!
17
+ # raise "New stuff from remote repository"
18
+ #end
19
19
  %w[github.com rubyforge.org].each { |server|
20
20
  cmd = "ping " + (
21
21
  if Config::CONFIG["host"] =~ %r!darwin!
@@ -59,7 +59,7 @@ task :drake_finish_release do
59
59
  }
60
60
 
61
61
  git("tag", "drake-" + SPEC.version.to_s)
62
- git(*%w(push --tags origin master))
62
+ git(*%w(push --tags origin))
63
63
  end
64
64
 
65
65
  task :drake_release =>
@@ -29,7 +29,7 @@
29
29
  # as a library via a require statement, but it can be distributed
30
30
  # independently as an application.
31
31
 
32
- RAKEVERSION = '0.8.7.0.2.3'
32
+ RAKEVERSION = '0.8.7.0.2.4'
33
33
 
34
34
  require 'rbconfig'
35
35
  require 'fileutils'
@@ -110,15 +110,8 @@ module Rake
110
110
  def invoke_with_call_chain_collector(task_args, new_chain, previous_chain)
111
111
  prereqs = invoke_prerequisites_collector(task_args, new_chain)
112
112
  parallel = application.parallel
113
- if needed? or parallel.tasks[self]
113
+ if needed? or prereqs.any? { |p| parallel.tasks[p] }
114
114
  parallel.tasks[self] = [task_args, prereqs]
115
- unless previous_chain == InvocationChain::EMPTY
116
- #
117
- # Touch the parent to propagate 'needed?' upwards. This
118
- # works because the recursion is depth-first.
119
- #
120
- parallel.tasks[previous_chain.value] = true
121
- end
122
115
  end
123
116
  end
124
117
 
@@ -17,7 +17,12 @@ class TestFileTask < Test::Unit::TestCase
17
17
  def setup
18
18
  Task.clear
19
19
  @runs = SerializedArray.new
20
- FileUtils.rm_f FILES
20
+ FileUtils.rm_rf "testdata", :verbose => false
21
+ FileUtils.mkdir_p "testdata", :verbose => false
22
+ end
23
+
24
+ def teardown
25
+ FileUtils.rm_rf "testdata", :verbose => false
21
26
  end
22
27
 
23
28
  def test_create_dispersed_timed_files
@@ -119,6 +124,166 @@ class TestFileTask < Test::Unit::TestCase
119
124
  assert_equal([ANCIENT_FILE, OLDFILE, MIDDLE_AGED_FILE], @runs)
120
125
  end
121
126
 
127
+ def test_old_file_in_between_with_missing_leaf
128
+ create_dispersed_timed_files(MIDDLE_AGED_FILE, OLDFILE)
129
+ sleep 1
130
+
131
+ file MIDDLE_AGED_FILE => OLDFILE do |t|
132
+ @runs << t.name
133
+ touch MIDDLE_AGED_FILE, :verbose => false
134
+ end
135
+ file OLDFILE => NEWFILE do |t|
136
+ @runs << t.name
137
+ touch OLDFILE, :verbose => false
138
+ end
139
+ file NEWFILE do |t|
140
+ @runs << t.name
141
+ touch NEWFILE, :verbose => false
142
+ end
143
+
144
+ Task[MIDDLE_AGED_FILE].invoke
145
+ assert_equal([NEWFILE, OLDFILE, MIDDLE_AGED_FILE], @runs)
146
+ end
147
+
148
+ def test_two_old_files_in_between_with_missing_leaf
149
+ create_dispersed_timed_files(MIDDLE_AGED_FILE, OLDFILE, ANCIENT_FILE)
150
+ sleep 1
151
+
152
+ file MIDDLE_AGED_FILE => OLDFILE do |t|
153
+ @runs << t.name
154
+ touch MIDDLE_AGED_FILE, :verbose => false
155
+ end
156
+ file OLDFILE => ANCIENT_FILE do |t|
157
+ @runs << t.name
158
+ touch OLDFILE, :verbose => false
159
+ end
160
+ file ANCIENT_FILE => NEWFILE do |t|
161
+ @runs << t.name
162
+ touch ANCIENT_FILE, :verbose => false
163
+ end
164
+ file NEWFILE do |t|
165
+ @runs << t.name
166
+ touch NEWFILE, :verbose => false
167
+ end
168
+
169
+ Task[MIDDLE_AGED_FILE].invoke
170
+ assert_equal([NEWFILE, ANCIENT_FILE, OLDFILE, MIDDLE_AGED_FILE], @runs)
171
+ end
172
+
173
+ def test_diamond_graph_with_missing_leaf
174
+ a, b, c, d = %w[a b c d].map { |n| "testdata/#{n}" }
175
+ create_timed_files(a, b, c)
176
+ sleep 1
177
+
178
+ file a => [b, c] do
179
+ @runs << a
180
+ touch a
181
+ end
182
+ file b => d do
183
+ @runs << b
184
+ touch b
185
+ end
186
+ file c => d do
187
+ @runs << c
188
+ touch c
189
+ end
190
+ file d do
191
+ @runs << d
192
+ touch d
193
+ end
194
+
195
+ Task[a].invoke
196
+ assert_equal [a, b, c, d], @runs.sort
197
+ end
198
+
199
+ def test_diamond_graph_with_new_leaf
200
+ a, b, c, d = %w[a b c d].map { |n| "testdata/#{n}" }
201
+ create_timed_files(a, b, c)
202
+ sleep 1
203
+ touch d
204
+
205
+ file a => [b, c] do
206
+ @runs << a
207
+ touch a
208
+ end
209
+ file b => d do
210
+ @runs << b
211
+ touch b
212
+ end
213
+ file c => d do
214
+ @runs << c
215
+ touch c
216
+ end
217
+ file d do
218
+ @runs << d
219
+ touch d
220
+ end
221
+
222
+ Task[a].invoke
223
+ assert_equal [a, b, c], @runs.sort
224
+ end
225
+
226
+ def test_kite_graph_with_missing_leaf
227
+ a, b, c, d, e = %w[a b c d e].map { |n| "testdata/#{n}" }
228
+ create_timed_files(a, b, c, d)
229
+ sleep 1
230
+
231
+ file a => [b, c] do
232
+ @runs << a
233
+ touch a
234
+ end
235
+ file b => d do
236
+ @runs << b
237
+ touch b
238
+ end
239
+ file c => d do
240
+ @runs << c
241
+ touch c
242
+ end
243
+ file d => e do
244
+ @runs << d
245
+ touch d
246
+ end
247
+ file e do
248
+ @runs << e
249
+ touch e
250
+ end
251
+
252
+ Task[a].invoke
253
+ assert_equal [a, b, c, d, e], @runs.sort
254
+ end
255
+
256
+ def test_kite_graph_with_new_leaf
257
+ a, b, c, d, e = %w[a b c d e].map { |n| "testdata/#{n}" }
258
+ create_timed_files(a, b, c, d)
259
+ sleep 1
260
+ touch e
261
+
262
+ file a => [b, c] do
263
+ @runs << a
264
+ touch a
265
+ end
266
+ file b => d do
267
+ @runs << b
268
+ touch b
269
+ end
270
+ file c => d do
271
+ @runs << c
272
+ touch c
273
+ end
274
+ file d => e do
275
+ @runs << d
276
+ touch d
277
+ end
278
+ file e do
279
+ @runs << e
280
+ touch e
281
+ end
282
+
283
+ Task[a].invoke
284
+ assert_equal [a, b, c, d], @runs.sort
285
+ end
286
+
122
287
  # I have currently disabled this test. I'm not convinced that
123
288
  # deleting the file target on failure is always the proper thing to
124
289
  # do. I'm willing to hear input on this topic.
metadata CHANGED
@@ -1,7 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drake
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.7.0.2.3
4
+ hash: 207
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 8
9
+ - 7
10
+ - 0
11
+ - 2
12
+ - 4
13
+ version: 0.8.7.0.2.4
5
14
  platform: ruby
6
15
  authors:
7
16
  - James M. Lawrence
@@ -9,20 +18,26 @@ autorequire:
9
18
  bindir: bin
10
19
  cert_chain: []
11
20
 
12
- date: 2009-05-27 00:00:00 -04:00
21
+ date: 2010-06-07 00:00:00 -04:00
13
22
  default_executable: drake
14
23
  dependencies:
15
24
  - !ruby/object:Gem::Dependency
16
25
  name: comp_tree
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
26
+ prerelease: false
27
+ requirement: &id001 !ruby/object:Gem::Requirement
28
+ none: false
20
29
  requirements:
21
30
  - - ">="
22
31
  - !ruby/object:Gem::Version
32
+ hash: 5
33
+ segments:
34
+ - 0
35
+ - 7
36
+ - 3
23
37
  version: 0.7.3
24
- version:
25
- description: Rake is a Make-like program implemented in Ruby. Tasks and dependencies are specified in standard Ruby syntax.
38
+ type: :runtime
39
+ version_requirements: *id001
40
+ description: " Rake is a Make-like program implemented in Ruby. Tasks\n and dependencies are specified in standard Ruby syntax. \n"
26
41
  email: quixoticsycophant@gmail.com
27
42
  executables:
28
43
  - drake
@@ -61,9 +76,9 @@ files:
61
76
  - CHANGES
62
77
  - CHANGES.drake
63
78
  - MIT-LICENSE
79
+ - README
64
80
  - Rakefile
65
81
  - Rakefile.drake
66
- - README
67
82
  - TODO
68
83
  - bin/drake
69
84
  - lib/rake/alt_system.rb
@@ -108,10 +123,10 @@ files:
108
123
  - test/test_definitions.rb
109
124
  - test/test_earlytime.rb
110
125
  - test/test_extension.rb
111
- - test/test_filelist.rb
112
- - test/test_fileutils.rb
113
126
  - test/test_file_creation_task.rb
114
127
  - test/test_file_task.rb
128
+ - test/test_filelist.rb
129
+ - test/test_fileutils.rb
115
130
  - test/test_ftp.rb
116
131
  - test/test_invocation_chain.rb
117
132
  - test/test_makefile_loader.rb
@@ -125,10 +140,10 @@ files:
125
140
  - test/test_rdoc_task.rb
126
141
  - test/test_require.rb
127
142
  - test/test_rules.rb
128
- - test/test_tasklib.rb
129
- - test/test_tasks.rb
130
143
  - test/test_task_arguments.rb
131
144
  - test/test_task_manager.rb
145
+ - test/test_tasklib.rb
146
+ - test/test_tasks.rb
132
147
  - test/test_test_task.rb
133
148
  - test/test_top_level_functions.rb
134
149
  - test/test_win32.rb
@@ -143,14 +158,12 @@ files:
143
158
  - test/data/namespace/Rakefile
144
159
  - test/data/statusreturn/Rakefile
145
160
  - test/data/unittest/Rakefile
146
- - test/data/unittest/subdir
147
161
  - doc/command_line_usage.rdoc
148
- - doc/example
162
+ - doc/example/Rakefile1
163
+ - doc/example/Rakefile2
149
164
  - doc/example/a.c
150
165
  - doc/example/b.c
151
166
  - doc/example/main.c
152
- - doc/example/Rakefile1
153
- - doc/example/Rakefile2
154
167
  - doc/glossary.rdoc
155
168
  - doc/jamis.rb
156
169
  - doc/parallel.rdoc
@@ -158,7 +171,6 @@ files:
158
171
  - doc/rake.1.gz
159
172
  - doc/rakefile.rdoc
160
173
  - doc/rational.rdoc
161
- - doc/release_notes
162
174
  - doc/release_notes/rake-0.4.14.rdoc
163
175
  - doc/release_notes/rake-0.4.15.rdoc
164
176
  - doc/release_notes/rake-0.5.0.rdoc
@@ -178,6 +190,8 @@ files:
178
190
  - doc/release_notes/rake-0.8.7.rdoc
179
191
  has_rdoc: true
180
192
  homepage: http://drake.rubyforge.org
193
+ licenses: []
194
+
181
195
  post_install_message:
182
196
  rdoc_options:
183
197
  - --line-numbers
@@ -188,23 +202,29 @@ rdoc_options:
188
202
  require_paths:
189
203
  - lib
190
204
  required_ruby_version: !ruby/object:Gem::Requirement
205
+ none: false
191
206
  requirements:
192
207
  - - ">="
193
208
  - !ruby/object:Gem::Version
209
+ hash: 3
210
+ segments:
211
+ - 0
194
212
  version: "0"
195
- version:
196
213
  required_rubygems_version: !ruby/object:Gem::Requirement
214
+ none: false
197
215
  requirements:
198
216
  - - ">="
199
217
  - !ruby/object:Gem::Version
218
+ hash: 3
219
+ segments:
220
+ - 0
200
221
  version: "0"
201
- version:
202
222
  requirements: []
203
223
 
204
224
  rubyforge_project: drake
205
- rubygems_version: 1.3.1
225
+ rubygems_version: 1.3.7
206
226
  signing_key:
207
- specification_version: 2
227
+ specification_version: 3
208
228
  summary: A branch of Rake supporting automatic parallelizing of tasks.
209
229
  test_files: []
210
230