5

次の構造のサンプル プロジェクトをセットアップします。

Gemfile
Guardfile

これらのファイルの内容は次のとおりです。

# Gemfile
source :rubygems
gem "guard"
gem "guard-shell"

# Guardfile
guard 'shell' do
  watch(/^test\.txt$/) {|m| `echo #{m.inspect} #{File.mtime(m[0])}` }
end

その後、私は走り続けますguard。そのファイルに何かをエコーするたびに、guard は変更を 2 回登録します。1 つのシェルで:

$ echo blah >> test.txt

シェル実行中のガード:

> [test.txt] 2012-06-26 00:40:22 +0200
> [test.txt] 2012-06-26 00:40:22 +0200

同じ動作が vim/nano などにも当てはまりますecho blah > test.txt

これが発生するのを防ぐ方法、またはこれが予想される動作であるかどうかについて、何か考えはありますか?

編集: github で問題を開きました: https://github.com/guard/guard/issues/297#issuecomment-6586266

4

1 に答える 1

5

guardand/orのバグ/機能のようguard-shellです。それについては、github で問題として報告します。mtimeそれまでの間、前回と同じファイルを実行しないようにする (醜い) 回避策を次に示します。

# Guardfile
class GFilter
  def self.run(files, &block)
    @mtimes ||= Hash.new

    files.each { |f|
      mtime = File.mtime(f)
      next if @mtimes[f] == mtime
      @mtimes[f] = mtime

      yield f
    }
  end
end

guard 'shell' do
  watch(/^test\.txt$/) {|m| GFilter.run(m) { |f| puts "File: #{f}" } }
end
于 2012-06-26T02:01:59.813 に答える