Skip to content

Commit 5ba97af

Browse files
authored
Merge pull request #183 from aycabta/file-dryrun-bug-92
FileTask#out_of_date? calls depended FileTask#out_of_date? for execution
2 parents bc5765f + 2346bc8 commit 5ba97af

File tree

3 files changed

+46
-1
lines changed

3 files changed

+46
-1
lines changed

lib/rake/file_task.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,14 @@ def timestamp
2929

3030
# Are there any prerequisites with a later time than the given time stamp?
3131
def out_of_date?(stamp)
32-
@prerequisites.any? { |n| application[n, @scope].timestamp > stamp }
32+
@prerequisites.any? { |prereq|
33+
prereq_task = application[prereq, @scope]
34+
if prereq_task.instance_of?(Rake::FileTask)
35+
prereq_task.timestamp > stamp || prereq_task.needed?
36+
else
37+
prereq_task.timestamp > stamp
38+
end
39+
}
3340
end
3441

3542
# ----------------------------------------------------------------

test/support/rakefile_definitions.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,24 @@ def rakefile_chains
7777
DEFAULT
7878
end
7979

80+
def rakefile_file_chains
81+
rakefile <<-RAKEFILE
82+
file "fileA" do |t|
83+
sh "echo contentA >\#{t.name}"
84+
end
85+
86+
file "fileB" => "fileA" do |t|
87+
sh "(cat fileA; echo transformationB) >\#{t.name}"
88+
end
89+
90+
file "fileC" => "fileB" do |t|
91+
sh "(cat fileB; echo transformationC) >\#{t.name}"
92+
end
93+
94+
task default: "fileC"
95+
RAKEFILE
96+
end
97+
8098
def rakefile_comments
8199
rakefile <<-COMMENTS
82100
# comment for t1

test/test_rake_functional.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,26 @@ def test_rules_chaining_to_file_task
295295
"'play.app' file should exist"
296296
end
297297

298+
def dryrun_tasks
299+
@err.split("\n").select { |line|
300+
line.match(/^\*\* Execute/)
301+
}.map { |line|
302+
line.gsub(/^\*\* Execute \(dry run\) /, "")
303+
}
304+
end
305+
306+
def test_update_midway_through_chaining_to_file_task
307+
rakefile_file_chains
308+
309+
rake "-n"
310+
assert_equal(%w{fileA fileB fileC default}, dryrun_tasks)
311+
rake
312+
sleep 1 # Ensure the timestamp is on a new second
313+
FileUtils.touch("fileA")
314+
rake "-n"
315+
assert_equal(%w{fileB fileC default}, dryrun_tasks)
316+
end
317+
298318
def test_file_creation_task
299319
rakefile_file_creation
300320

0 commit comments

Comments
 (0)