Skip to content

Commit b27d86f

Browse files
committed
Don't run file tasks needlessly. Fixes ruby#246
1 parent 5fca980 commit b27d86f

File tree

3 files changed

+26
-9
lines changed

3 files changed

+26
-9
lines changed

lib/rake/file_task.rb

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,7 @@ def timestamp
3030

3131
# Are there any prerequisites with a later time than the given time stamp?
3232
def out_of_date?(stamp)
33-
all_prerequisite_tasks.any? { |prereq|
34-
prereq_task = application[prereq, @scope]
35-
if prereq_task.instance_of?(Rake::FileTask)
36-
prereq_task.timestamp > stamp || @application.options.build_all
37-
else
38-
prereq_task.timestamp > stamp
39-
end
40-
}
33+
prerequisite_tasks.any? { |task| task.timestamp > stamp }
4134
end
4235

4336
# ----------------------------------------------------------------

lib/rake/task.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,12 @@ def invoke_with_call_chain(task_args, invocation_chain) # :nodoc:
192192
return if @already_invoked
193193
@already_invoked = true
194194
invoke_prerequisites(task_args, new_chain)
195-
execute(task_args) if needed?
195+
196+
if needed?
197+
execute(task_args)
198+
elsif application.options.dryrun && prerequisite_tasks.any? { |p| p.is_a?(Rake::FileTask) }
199+
application.trace "** Execute (dry run) #{name}"
200+
end
196201
end
197202
rescue Exception => ex
198203
add_chain_to(ex, new_chain)

test/test_rake_functional.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,25 @@ def dryrun_tasks
304304
}
305305
end
306306

307+
def test_file_timestamps_respected_despite_task_prerequisite
308+
rakefile <<-RAKEFILE
309+
task "some_task" do
310+
end
311+
312+
file "A" => "some_task"
313+
file "B" => "A" do |t|
314+
touch t.name
315+
end
316+
RAKEFILE
317+
318+
FileUtils.touch("A")
319+
FileUtils.touch("B")
320+
321+
rake "B"
322+
323+
assert(@err !~ /touch B/)
324+
end
325+
307326
def test_update_midway_through_chaining_to_file_task
308327
rakefile_file_chains
309328

0 commit comments

Comments
 (0)