Watchdog: No detecta la modificación de archivos con vim en OSX 10.7

Creado en 13 ago. 2011  ·  7Comentarios  ·  Fuente: gorakhargosh/watchdog

Al principio, el soporte de FSEvents ahora funciona maravillosamente en OSX. ¡Gracias!

Desafortunadamente, Watchdot no puede detectar las modificaciones de guardado de Vim en un archivo existente en una Mac.

Lo rastreé aquí:
https://github.com/gorakhargosh/watchdog/blob/master/src/watchdog/utils/dirsnapshot.py#L95

No tengo idea de por qué, pero parece que cuando vim guarda un archivo, obtiene un nuevo número de inodo y el mecanismo de vigilancia no puede categorizar el evento y lo ignora.

Un ejemplo de información estadística de ref_dirsnap:

posix.stat_result(st_mode=33188, st_ino=51180728, st_dev=234881027L, st_nlink=1, st_uid=501, st_gid=20, st_size=2756, st_atime=1313212427, st_mtime=1313212426=1313212426, st_2time)

La misma información estadística de dirsnap:

posix.stat_result(st_mode=33188, st_ino=51180736, st_dev=234881027L, st_nlink=1, st_uid=501, st_gid=20, st_size=2756, st_atime=1313212514, st_mtime=1313212514, st_2time)

Algunos otros editores, por ejemplo, TextMate, funcionan correctamente (st_ino no cambia y la modificación se detecta correctamente).

Todos 7 comentarios

Para aquellos que no pueden esperar a que se corrija (ya sea para vim o watchog; no sé cuál es el correcto), puede hacer que watchdog sea un poco más tonto para detectar modificaciones:

diff --git a/src/watchdog/utils/dirsnapshot.py b/src/watchdog/utils/dirsnapshot.py
index dbd121b..0d91fcc 100644
--- a/src/watchdog/utils/dirsnapshot.py
+++ b/src/watchdog/utils/dirsnapshot.py
@@ -92,7 +92,7 @@ class DirectorySnapshotDiff(object):
         for path, stat_info in dirsnap.stat_snapshot.items():
             if path in ref_dirsnap.stat_snapshot:
                 ref_stat_info = ref_dirsnap.stat_info(path)
-                if stat_info.st_ino == ref_stat_info.st_ino and stat_info.st_mtime != ref_stat_info.
+                if stat_info.st_mtime != ref_stat_info.st_mtime:
                     if stat.S_ISDIR(stat_info.st_mode):
                         self._dirs_modified.append(path)
                     else:

Cuando guarda un archivo llamado foobar.txt usando Vim, esencialmente crea
un archivo foobar.txt.swp en el mismo directorio que el archivo, elimina el antiguo
one, y cambia el nombre del archivo .swp al nombre de archivo original. Entonces, sería
más sabio usar un patrón con un comando en su lugar así:

$ watchmedo log --pattern="*.swp;*.py;*.~;*.rb" --recursive .

Actualizar:

Aquí hay una mejor manera. Puede deshabilitar la creación de archivos de intercambio en Vim.

:set noswapfile

en su ~/.vimrc y no necesita editar ni vigilancia ni
escribir un patrón. Esto mantendrá el monitoreo funcionando como esperas.

También descubrí que hay una opción para eso en vim.

:set nowritebackup

Ahora hay muchas opciones para hacer que Vim o Watchdog se comporten :)

Le agradezco mucho y doy por cerrado esto.

Un comentario final. En realidad, tuve que deshabilitar las copias de seguridad por completo

:set nobackup
:set nowritebackup

(o configúrelos en ~/.vimrc ) para evitar que vim cree un nuevo archivo al guardarlo y que Watchdog lo detecte.

También me pregunto por qué :set nowswapfile no tuvo ningún efecto para mí. De todos modos, estoy bastante feliz ahora.

Estoy enfrentando el mismo problema con el editor Espresso (en OS X) que desafortunadamente no tiene una opción de configuración para eso. De acuerdo con ls -i , Espresso crea un nuevo archivo cada vez que se guarda. ¿Algún cambio que esto podría resolverse en el nivel de vigilancia?

¡Gracias por watchdog y por este número! Esto terminó funcionando para mí también:

:set nobackup
:set nowritebackup

+1 para reabrir. Los usuarios que no encuentren la solución aquí asumirán que watchdog está roto, yo lo hice. Mientras tanto, herramientas similares como watchr "simplemente funcionan", sin cambiar ninguna configuración de Vim. watchdog es genial, pero desearía no tener que cambiar mi vimrc para usarlo.

¿Fue útil esta página
0 / 5 - 0 calificaciones