Ich beobachte Dateien mithilfe von inotify-Ereignissen auf Änderungen (wie es passiert, von Python aus, indem ich libc aufrufe).
Für einige Dateien während eines git clonesehe ich etwas Seltsames: Ich sehe ein IN_CREATEEreignis, und ich sehe darüber, lsdass die Datei Inhalt hat, aber ich sehe IN_MODIFYoder nie IN_CLOSE_WRITE. Dies verursacht Probleme, da ich IN_CLOSE_WRITEauf die Dateien antworten möchte : insbesondere, um einen Upload des Dateiinhalts zu initiieren.
Die Dateien, die sich merkwürdig verhalten, befinden sich im .git/objects/packVerzeichnis und enden mit .packoder .idx. Andere Dateien, die git erstellt, haben eine regelmäßigere IN_CREATE-> IN_MODIFY-> IN_CLOSE_WRITEKette (ich suche nicht nach IN_OPENEreignissen).
Dies ist in Docker unter MacOS enthalten, aber ich habe Hinweise auf Docker unter Linux in einem Remote-System gesehen, sodass ich den Verdacht habe, dass der MacOS-Aspekt nicht relevant ist. Ich sehe dies, wenn ich zuschaue und mich git cloneim selben Docker-Container befinde.
Meine Fragen:
Warum fehlen diese Ereignisse in diesen Dateien?
Was kann man dagegen tun? Wie kann ich konkret auf den Abschluss von Schreibvorgängen in diese Dateien reagieren? Hinweis: Idealerweise möchte ich antworten, wenn das Schreiben "beendet" ist, um zu vermeiden, dass unnötig / (fälschlicherweise) "unfertiges" Schreiben hochgeladen wird.
Bearbeiten: Lesen von https://developer.ibm.com/tutorials/l-inotify/ Es sieht so aus, als ob das, was ich sehe, mit dem übereinstimmt, was ich sehe
- eine separate temporäre Datei mit Namen wie
tmp_pack_hBV4Alz, die erstellt, geändert und geschlossen wird; - Zu dieser Datei wird ein fester Link mit dem endgültigen
.packNamen erstellt. - Der ursprüngliche
tmp_pack_hBV4AlzName wird gelöscht.
Ich denke, mein Problem, das versucht, inotify als Auslöser zum Hochladen von Dateien zu verwenden, reduziert sich dann darauf, zu bemerken, dass die .packDatei ein fester Link zu einer anderen Datei ist, und in diesem Fall hochzuladen?