Saya menonton file untuk perubahan menggunakan acara inotify (seperti yang terjadi, dari Python, memanggil libc).
Untuk beberapa file selama git clone
, saya melihat sesuatu yang aneh: Saya melihat suatu IN_CREATE
peristiwa, dan saya melihat ls
bahwa file tersebut memiliki konten, namun, saya tidak pernah melihat IN_MODIFY
atau IN_CLOSE_WRITE
. Ini menyebabkan masalah bagi saya karena saya ingin merespons IN_CLOSE_WRITE
pada file: khususnya, untuk memulai pengunggahan konten file.
File yang berperilaku aneh ada di .git/objects/pack
direktori, dan berakhir di .pack
atau .idx
. File lain yang dibuat git memiliki rantai IN_CREATE
-> IN_MODIFY
-> yang lebih teratur IN_CLOSE_WRITE
(Saya tidak menonton IN_OPEN
acara).
Ini ada di dalam docker pada MacOS, tapi saya telah melihat bukti yang sama pada docker di Linux dalam sistem jarak jauh, jadi kecurigaan saya adalah aspek MacOS tidak relevan. Saya melihat ini jika menonton dan git clone
berada di wadah buruh pelabuhan yang sama .
Pertanyaan saya:
Mengapa acara ini hilang pada file-file ini?
Apa yang bisa dilakukan? Secara khusus, bagaimana saya bisa menanggapi penyelesaian penulisan ke file-file ini? Catatan: idealnya saya ingin menjawab ketika penulisan "selesai" untuk menghindari pengunggahan yang tidak perlu / (salah) mengunggah tulisan "belum selesai".
Sunting: Membaca https://developer.ibm.com/tutorials/l-inotify/ sepertinya yang saya lihat konsisten dengan
- file sementara yang terpisah, dengan nama seperti
tmp_pack_hBV4Alz
, sedang dibuat, dimodifikasi dan, ditutup; - a keras link dibuat untuk file ini, dengan akhir
.pack
nama; tmp_pack_hBV4Alz
nama aslinya dihapus.
Saya pikir masalah saya, yang mencoba menggunakan tidak sah sebagai pemicu untuk mengunggah file, kemudian mengurangi untuk memperhatikan bahwa .pack
file tersebut merupakan tautan keras ke file lain, dan mengunggah dalam kasus ini?