2012-06-25 28 views
5

ho configurato un progetto di esempio con la seguente struttura:Guardia esegue gli script di shell due volte

Gemfile 
Guardfile 

Il contenuto di questi file sono:

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

e

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

ho quindi continuare per eseguire guard. Ogni volta che echo qualcosa in quel file, la guardia registra un cambiamento due volte. In una shell:

$ echo blah >> test.txt 

nella Guardia shell in esecuzione: Conti

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

lo stesso comportamento per vim/nano, ecc È interessante notare che, quando ho appena eseguito echo blah > test.txt, guardia spara solo una volta.

Qualche idea su come posso evitare che ciò accada o se si tratta di un comportamento previsto?

EDIT: aperto un problema su github: https://github.com/guard/guard/issues/297#issuecomment-6586266

risposta

5

sembra un bug/caratteristica di guard e/o guard-shell. Segnalerei in questione su Github per questo. Nel frattempo, ecco un (brutto) soluzione per evitare che i file in esecuzione in cui l'mtime è la stessa come l'ultima volta:

# 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

Grande :) Non ero sicuro se mi manca qualcosa di ovvio. Grazie per la risposta! – jabalsad

Problemi correlati