subscribe via RSS
Find out where a Rake task is defined
TL;DR
Rake > 0.8.7 has a handy Rake::Task#locations
method that makes it
damn easy to know where a task is defined or enhanced.
During the last LyonRb meetup we read a quite large portion of Rake’s source code. The idea was to find an easy way to determine what file was defining/enhancing what task.
Richard and I just opened Rake 0.8.7’s source code (from our local machine’s RVM directory) and started hacking a bit to have that feature…
Two days after I can tell you that you won’t need to hack anything because it’s actually already implemented in Rake’s master since May 19th 2009 by Jim Weirich.
It wasn’t obvious to us as Rake 0.8.7 has been released on… May 15th 2009!
~ cd /tmp && git clone git://github.com/jimweirich/rake.git && cd rake && rake gem && gem install pkg/rake-0.8.99.5.gem
Cloning into rake...
remote: Counting objects: 5804, done.
remote: Compressing objects: 100% (2489/2489), done.
remote: Total 5804 (delta 3387), reused 5519 (delta 3180)
Receiving objects: 100% (5804/5804), 1.23 MiB | 613 KiB/s, done.
Resolving deltas: 100% (3387/3387), done.
RCov is not available
ERROR: unknown action 'gemsets'
Successfully installed rake-0.8.99.5
1 gem installed
/tmp cat >> foo.rb << EOF
heredoc> desc 'foo'
heredoc> task :foo do; end
heredoc> desc 'foobar'
heredoc> task :foobar do; end
heredoc> EOF
/tmp cat >> baz.rb << EOF
heredoc> desc 'baz'
heredoc> task :baz do; end
heredoc> task 'foobaz'
heredoc> task :foobar do; end
heredoc> EOF
/tmp cat >> Rakefile << EOF
heredoc> load 'foo.rb'
heredoc> load 'baz.rb'
heredoc> EOF
/tmp rake -T
rake baz # baz
rake foo # foo
rake foobar # foobar
/tmp rake --where
rake baz baz.rb:2:in `<top (required)>'
rake foo foo.rb:2:in `<top (required)>'
rake foobar foo.rb:4:in `<top (required)>'
rake foobar baz.rb:4:in `<top (required)>'