2012-06-25 24 views
5
configuración

que un proyecto de ejemplo con la siguiente estructura:Guardia ejecuta scripts de shell dos veces

Gemfile 
Guardfile 

El contenido de estos archivos son:

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

y

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

que luego continuar ejecutar guard. Cada vez que hago eco de algo en ese archivo, el guardia registra un cambio dos veces. En una shell:

$ echo blah >> test.txt 

en la guardia de la cáscara de funcionamiento: las cuentas

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

El mismo comportamiento para vim/nano etc. Curiosamente, cuando acabo de correr echo blah > test.txt, guardia sólo se activa una vez.

¿Alguna idea de cómo puedo evitar que esto suceda o si este es el comportamiento esperado?

EDIT: abría un problema en github: https://github.com/guard/guard/issues/297#issuecomment-6586266

Respuesta

5

parece un bug/función de guard y/o guard-shell. Me reportaría en cuestión en github por ello. Mientras tanto aquí hay una solución (fea) para evitar que los archivos que se ejecutan en el mtime es lo mismo que la última vez:

# 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

Gran :) Yo no estaba seguro de si me falta algo obvio. ¡Gracias por la respuesta! – jabalsad

Cuestiones relacionadas