Sto guardando i file per le modifiche usando gli eventi inotify (come succede, da Python, chiamando in libc).
Per alcuni file durante un git clone
, vedo qualcosa di strano: vedo un IN_CREATE
evento e vedo via ls
che il file ha contenuto, tuttavia, non vedo mai IN_MODIFY
o IN_CLOSE_WRITE
. Questo mi sta causando problemi poiché vorrei rispondere ai IN_CLOSE_WRITE
file: in particolare, avviare un caricamento del contenuto del file.
I file che si comportano in modo strano si trovano nella .git/objects/pack
directory e terminano in .pack
o .idx
. Altri file creati da Git hanno una catena IN_CREATE
-> IN_MODIFY
-> più regolare IN_CLOSE_WRITE
(non cerco IN_OPEN
eventi).
Questo è all'interno della finestra mobile su MacOS, ma ho visto prove dello stesso sulla finestra mobile su Linux in un sistema remoto, quindi il mio sospetto è che l'aspetto di MacOS non sia pertinente. Lo vedo se guardo e git clone
sono nello stesso contenitore docker.
Le mie domande:
Perché questi eventi mancano su questi file?
Cosa si può fare al riguardo? In particolare, come posso rispondere al completamento delle scritture su questi file? Nota: idealmente vorrei rispondere quando la scrittura è "finita" per evitare di caricare inutilmente / (erroneamente) la scrittura "incompiuta".
Modifica: leggendo https://developer.ibm.com/tutorials/l-inotify/ sembra che ciò che vedo sia coerente con
- un file temporaneo separato, con nome simile
tmp_pack_hBV4Alz
, creato, modificato e chiuso; - un difficile collegamento viene creato a questo file, con la finale
.pack
nome; - il
tmp_pack_hBV4Alz
nome originale è cancellato.
Penso che il mio problema, che sta cercando di utilizzare inotify come trigger per caricare file, si riduce a notare che il .pack
file è un collegamento reale a un altro file e il caricamento in questo caso?