[rake] rule with regex executed twice for same matching string

  • Thread starter Joel VanderWerf
  • Start date
J

Joel VanderWerf

Does anyone know why this rule is executed twice?

$ cat rakefile
task :default => "foo"

deps = [proc {"bar"}, proc {"barney"}]
rule /^foo$/ => deps

rule /^bar$/ do |t|
puts t.name
end

$ rake --trace
(in /home/vjoel/tmp/raketest)
** Invoke default (first_time)
** Invoke foo (first_time)
** Invoke bar (first_time)
** Execute bar
bar
bar
** Execute foo
*
 
J

Joel VanderWerf

This seems to be a bug in rake. It affects rules with multiple
prerequisites (but only if at least one prerequisite after the first is
a rule).

Here's a patch against the current rake gem version, 0.7.1:

$ diff -u rake.rb.bck rake.rb
--- rake.rb.bck 2006-11-10 12:11:32.000000000 -0800
+++ rake.rb 2006-11-10 12:11:32.000000000 -0800
@@ -1566,7 +1566,7 @@
prereqs = sources.collect { |source|
if File.exist?(source) || Rake::Task.task_defined?(source)
source
- elsif parent = enhance_with_matching_rule(sources.first, level+1)
+ elsif parent = enhance_with_matching_rule(source, level+1)
parent.name
else
return nil


Joel said:
Does anyone know why this rule is executed twice?

$ cat rakefile
task :default => "foo"

deps = [proc {"bar"}, proc {"barney"}]
rule /^foo$/ => deps

rule /^bar$/ do |t|
puts t.name
end

$ rake --trace
(in /home/vjoel/tmp/raketest)
** Invoke default (first_time)
** Invoke foo (first_time)
** Invoke bar (first_time)
** Execute bar
bar
bar
** Execute foo
*
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,756
Messages
2,569,535
Members
45,008
Latest member
obedient dusk

Latest Threads

Top