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_CREATEevento e vedo via lsche il file ha contenuto, tuttavia, non vedo mai IN_MODIFYo IN_CLOSE_WRITE. Questo mi sta causando problemi poiché vorrei rispondere ai IN_CLOSE_WRITEfile: in particolare, avviare un caricamento del contenuto del file.
I file che si comportano in modo strano si trovano nella .git/objects/packdirectory e terminano in .packo .idx. Altri file creati da Git hanno una catena IN_CREATE-> IN_MODIFY-> più regolare IN_CLOSE_WRITE(non cerco IN_OPENeventi).
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 clonesono 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
.packnome; - il
tmp_pack_hBV4Alznome originale è cancellato.
Penso che il mio problema, che sta cercando di utilizzare inotify come trigger per caricare file, si riduce a notare che il .packfile è un collegamento reale a un altro file e il caricamento in questo caso?