J'observe les fichiers pour les changements en utilisant des événements inotify (en l'occurrence, depuis Python, en appelant dans libc).
Pour certains fichiers pendant un git clone, je vois quelque chose d'étrange: je vois un IN_CREATEévénement, et je vois via lsque le fichier a du contenu, cependant, je ne vois jamais IN_MODIFYou IN_CLOSE_WRITE. Cela me pose des problèmes car j'aimerais répondre IN_CLOSE_WRITEsur les fichiers: en particulier, pour lancer un téléchargement du contenu du fichier.
Les fichiers qui se comportent bizarrement se trouvent dans le .git/objects/packrépertoire et se terminent par .packou .idx. Les autres fichiers créés par git ont une chaîne IN_CREATE-> IN_MODIFY-> plus régulière IN_CLOSE_WRITE(je ne surveille pas les IN_OPENévénements).
C'est à l'intérieur de Docker sur MacOS, mais j'ai vu des preuves de la même chose sur Docker sur Linux dans un système distant, donc je soupçonne que l'aspect MacOS n'est pas pertinent. Je vois cela si je regarde et je suis git clonedans le même conteneur docker.
Mes questions:
Pourquoi ces événements manquent-ils dans ces fichiers?
Que peut-on y faire? Plus précisément, comment puis-je répondre à la fin des écritures dans ces fichiers? Remarque: idéalement, je voudrais répondre lorsque l'écriture est "terminée" pour éviter de télécharger inutilement / (incorrectement) une écriture "inachevée".
Edit: la lecture de https://developer.ibm.com/tutorials/l-inotify/ il ressemble à ce que je vois est cohérent avec
- un fichier temporaire distinct, avec un nom similaire
tmp_pack_hBV4Alz, en cours de création, de modification et de fermeture; - un lien dur est créé vers ce fichier, avec le
.packnom final ; - le
tmp_pack_hBV4Alznom d' origine est supprimé.
Je pense que mon problème, qui essaie d'utiliser inotify comme déclencheur pour télécharger des fichiers, se réduit ensuite à remarquer que le .packfichier est un lien dur vers un autre fichier, et le téléchargement dans ce cas?