RakeFileUtils :noop, :verbose の デフォルトオプションがおかしい
id:ke-k:20080211:rakefileutils でもちょろっと書きましたが、 RakeFileUtils がうまく動いていないようです。
nowrite(true) verbose(true) sh 'mkdir hoge' mkdir 'fuga'
とすると、sh には :noop, :verbose オプションが渡されているのですが、 mkdir には渡されていません。
前回も見た
module RakeFileUtils # ... FileUtils::OPT_TABLE.each do |name, opts| default_options = [] if opts.include?('verbose') default_options << ':verbose => RakeFileUtils.verbose_flag' end if opts.include?('noop') default_options << ':noop => RakeFileUtils.nowrite_flag' end next if default_options.empty? module_eval(<<-EOS, __FILE__, __LINE__ + 1) def #{name}( *args, &block ) super( *rake_merge_option(args, #{default_options.join(', ')} ), &block) end EOS end
の部分を見直してみると、 opts.include?('verbose') としてますが、ここにはSymbolが入っているので、opts.include?(:verbose) が正しいですね。 OPT_TALBE['sh'] の代入の部分もおかしいです。
というわけで、svnのtrunkとのdiffです。
Index: rake.rb =================================================================== --- rake.rb (revision 639) +++ rake.rb (working copy) @@ -871,8 +871,8 @@ module FileUtils RUBY = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name']) - OPT_TABLE['sh'] = %w(noop verbose) - OPT_TABLE['ruby'] = %w(noop verbose) + OPT_TABLE['sh'] = [:noop, :verbose] + OPT_TABLE['ruby'] = [:noop, :verbose] # Run the system command +cmd+. If multiple arguments are given the command # is not run with the shell (same semantics as Kernel::exec and @@ -970,10 +970,10 @@ FileUtils::OPT_TABLE.each do |name, opts| default_options = [] - if opts.include?('verbose') + if opts.include?(:verbose) default_options << ':verbose => RakeFileUtils.verbose_flag' end - if opts.include?('noop') + if opts.include?(:noop) default_options << ':noop => RakeFileUtils.nowrite_flag' end
これでOKのはずです。