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のはずです。