[ruby][rake]rakeが実行されるまでを調べる(2)
仕切り直しで・・
Rake::Application#run
コメントにあるとおりinit、load_rakefile、top_levelの3ステップを実行。
3ステップのそれぞれのメソッドの中の処理はstandard_exception_handlingメソッドのブロックとして実行している。
Rake::Application#standard_exception_handling
名のとおり例外処理
init、load_rakefile、top_levelメソッドの中からの別のメソッドの呼び出しは、standard_exception_handlingメソッドに渡すブロックとして実行している。
こうすることで例外処理を1つにまとめるテクの模様。
Rake::Application#init
- handle_options()
- コマンドラインから渡されたオプションの処理。
- GetoptLongを使っている
- GetoptLongの使い方知らない
- http://www.sra.co.jp/people/m-kasahr/ruby/getoptlong/getoptlong-ja.doc
- オプション'--classic-namespace'の意味がわからない
- collect_tasks()
- rakeコマンドに渡す文字列で「hoge=bar」形式のものをENV[hoge]=barに設定。
- 「hoge=bar」形式でないものはトップレベルのタスクとされる。
Rake::Application#load_rakefile
- raw_load_rakefile()
このあとがややこしい。
load_imports()がややこしい。
invoke()がなにやってるかまでいけない。
@pending_importsに入ってるのは
\*.rakeファイルのフルパスで、これを引数にRake::TaskManager#lookupを呼び出す。。呼び出す。。
rake実行時にrakelibを渡さなければここはスルーだけど。。
Rake::Application#top_level
基本はinit()で設定したトップレベルのタスクをinvokeするだけ。
疑問
- Rake::Applicationのメソッドを全部publicにしてる意味あるのか?
- (こっからprivateだよ、みたいなコメントがあるが・・)
- Module(Rake::TaskManager)のinitializeメソッドって?
- はっ。モジュールをincludeしたクラスのinitializeのsuperから呼び出されるのか!=>参考