autotestでの例外ルール記述

autotestについては詳しく説明しませんが、
テストに該当するであろうファイルを予測し、
タイムスタンプが変更されると、自動でテストを実行してくれるツールです。

ただ、デフォルトでは実行したディレクトリの全てのファイルに対して
タイムスタンプのウォッチを行うので、負荷はもちろんのこと、
例えばEmacsでflymakeなんかを使っていると、
ファイルを編集しただけで一時ファイルの生成/変更を検知し、
テストを実行してしまう、なんてこともあります。っていうかありました。

そこで今回は無視(例外)ルールの記述について書いてみます。
.autotest:

Autotest.add_hook :initialize do |autotest|
  ignores = %w{.git .autotest .rspec coverage README.markdown}
  ignores.each do |exception|
    autotest.add_exception(exception)
  end
end

Autotest.add_hook :run do |autotest|
  autotest.exceptions = /.*_flymake\.rb$|.*\.yml$/
end

ずばり現在使っているのがこれです。
使えません。修正バージョンは下のほうに。
Rails用ではないので、その辺は改造して欲しいところではありますが……。

とりあえず :initialize フックで静的に無視するファイルを指定しています。
コードカバレッジリポジトリの差分ファイルを全てチェックされたのでは
精神衛生上よくないというものです。

次に :run フックで正規表現による無視ルールを追加しています。
調べが足りないと思うんですが、 :initialize フックでは正規表現は使えない(?)
ので、ひとまずはこれでよろしくやってくれているので満足ではあります。

修正版。

Autotest.add_hook :initialize do |autotest|
  %w{.git .autotest .rspec coverage README.markdown}.each do |exception|
    autotest.add_exception(exception)
  end
  autotest.add_exception(/.*\.yml$/)
  autotest.add_exception(/.*_flymake\.rb$/)
end

大嘘ぶっこいてました、 :initialize フックで正規表現使えました。
flymakeの一時ファイルに関してはまだちょっとわからないので、
また追記するかも知れません。