Estoy mirando los archivos para ver los cambios usando eventos inotify (como sucede, desde Python, llamando a libc).
Para algunos archivos durante un git clone, veo algo extraño: veo un IN_CREATEevento, y veo lsque el archivo tiene contenido, sin embargo, nunca veo IN_MODIFYo IN_CLOSE_WRITE. Esto me está causando problemas ya que me gustaría responder IN_CLOSE_WRITEen los archivos: específicamente, para iniciar una carga del contenido del archivo.
Los archivos que se comportan de manera extraña están en el .git/objects/packdirectorio y terminan en .packo .idx. Otros archivos que crea git tienen una cadena más regular IN_CREATE-> IN_MODIFY-> IN_CLOSE_WRITE(no estoy buscando IN_OPENeventos).
Esto está dentro de Docker en MacOS, pero he visto evidencia de lo mismo en Docker en Linux en un sistema remoto, por lo que sospecho que el aspecto de MacOS no es relevante. Estoy viendo esto si estoy mirando y estoy git cloneen el mismo contenedor acoplable.
Mis preguntas:
¿Por qué faltan estos eventos en estos archivos?
¿Qué se puede hacer al respecto? Específicamente, ¿cómo puedo responder a la finalización de las escrituras en estos archivos? Nota: idealmente me gustaría responder cuando la escritura esté "terminada" para evitar la carga innecesaria / (incorrecta) de la escritura "sin terminar".
Editar: Lectura https://developer.ibm.com/tutorials/l-inotify/ parece que lo que estoy viendo es coherente con
- un archivo temporal separado, con nombre como
tmp_pack_hBV4Alz, siendo creado, modificado y cerrado; - se crea un enlace duro a este archivo, con el
.packnombre final ; tmp_pack_hBV4AlzSe borra el nombre original .
Creo que mi problema, que es tratar de usar inotify como un desencadenante para cargar archivos, luego se reduce a notar que el .packarchivo es un enlace duro a otro archivo y cargarlo en este caso.