2012-06-25 9 views
5

mogę skonfigurować projekt przykład o następującej strukturze:Straż wykonuje skrypty powłoki dwukrotnie

Gemfile 
Guardfile 

Zawartość tych plików są:

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

i

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

I wtedy kontynuować uruchomić guard. Kiedy tylko echo coś do tego pliku, strażnik rejestruje zmianę dwa razy. W jednej powłoki:

$ echo blah >> test.txt 

w straży bieżącej powłoki: Konta

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

To samo zachowanie dla vim/nano itp ciekawe, kiedy wystarczy uruchomić echo blah > test.txt, straży odpala tylko raz.

Każdy pomysł, w jaki sposób mogę temu zapobiec lub czy jest to oczekiwane zachowanie?

EDIT: otwarty problem na github: https://github.com/guard/guard/issues/297#issuecomment-6586266

Odpowiedz

5

Wygląda bug/cechą guard i/lub guard-shell. Na ten temat zgłosiłbym wydanie na Github. W międzyczasie oto (brzydki) obejście, aby zapobiec uruchomione pliki gdzie mtime jest taka sama, jak po raz ostatni:

# 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 
+0

Wielką :) Nie był pewien, czy jestem brakuje czegoś oczywiste. Dziękuję za odpowiedź! – jabalsad

Powiązane problemy