İnotify olaylarını kullanarak değişiklikleri izlemek için dosyaları izliyorum (olduğu gibi, Python'dan libc'ye çağırıyor).
A sırasında bazı dosyalar için git clone
, garip bir şey görüyorum: bir IN_CREATE
olay görüyorum ve görüyorum ls
ki dosya içeriğe sahip, ancak, asla görmüyorum IN_MODIFY
veya IN_CLOSE_WRITE
. IN_CLOSE_WRITE
Dosyalara yanıt vermek istediğim için bu bana sorun yaratıyor : özellikle, dosya içeriğinin yüklenmesini başlatmak için.
Garip davranan dosyalar .git/objects/pack
dizinde bulunur ve .pack
veya ile biter .idx
. Git'in oluşturduğu diğer dosyalar daha düzenli IN_CREATE
-> IN_MODIFY
-> bir IN_CLOSE_WRITE
zincire sahiptir ( IN_OPEN
olayları izlemiyorum ).
Bu, MacOS'taki docker'ın içinde, ancak uzak bir sistemde Linux'ta docker'da da aynı şeyin kanıtını gördüm, bu yüzden şüphem MacOS yönünün alakalı olmadığıdır. İzliyor ve eğer bunu görüyorum git clone
içindedir aynı liman işçisi kap.
Sorularım:
Bu olaylar bu dosyalarda neden eksik?
Bu konuda ne yapılabilir? Özellikle, bu dosyalara yazma işlemlerinin tamamlanmasına nasıl yanıt verebilirim? Not: İdeal olarak "bitmemiş" yazmayı yüklemeden gereksiz / (yanlış) yüklemeyi önlemek için yazma "bittiğinde" yanıt vermek istiyorum.
Düzenleme: https://developer.ibm.com/tutorials/l-inotify/ okumak, gördüğüm şeyle tutarlı görünüyor
- adı
tmp_pack_hBV4Alz
oluşturulmuş, değiştirilmiş ve kapatılmış ayrı bir geçici dosya ; - bu dosyaya son adla bir sabit bağlantı oluşturulur
.pack
; - orijinal
tmp_pack_hBV4Alz
ad silinir.
Bence dosyaları yüklemek için bir tetikleyici olarak inotify kullanmaya çalışan sorunum daha sonra .pack
dosyanın başka bir dosyaya sabit bir bağlantı olduğunu ve bu durumda karşıya yükleme farkını azaltır azalır ?