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 clone
sehe ich etwas Seltsames: Ich sehe ein IN_CREATE
Ereignis, und ich sehe darüber, ls
dass die Datei Inhalt hat, aber ich sehe IN_MODIFY
oder nie IN_CLOSE_WRITE
. Dies verursacht Probleme, da ich IN_CLOSE_WRITE
auf 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/pack
Verzeichnis und enden mit .pack
oder .idx
. Andere Dateien, die git erstellt, haben eine regelmäßigere IN_CREATE
-> IN_MODIFY
-> IN_CLOSE_WRITE
Kette (ich suche nicht nach IN_OPEN
Ereignissen).
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 clone
im 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
.pack
Namen erstellt. - Der ursprüngliche
tmp_pack_hBV4Alz
Name 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 .pack
Datei ein fester Link zu einer anderen Datei ist, und in diesem Fall hochzuladen?