Tôi đang xem các tệp để thay đổi bằng cách sử dụng các sự kiện inotify (như nó xảy ra, từ Python, gọi vào libc).
Đối với một số tệp trong một git clone
, tôi thấy một điều kỳ lạ: Tôi thấy một IN_CREATE
sự kiện và tôi thấy qua ls
đó tệp có nội dung, tuy nhiên, tôi không bao giờ thấy IN_MODIFY
hoặc IN_CLOSE_WRITE
. Điều này gây ra sự cố cho tôi vì tôi muốn phản hồi IN_CLOSE_WRITE
trên các tệp: cụ thể, để bắt đầu tải lên nội dung tệp.
Các tập tin hoạt động kỳ lạ nằm trong .git/objects/pack
thư mục và chúng kết thúc bằng .pack
hoặc .idx
. Các tệp khác mà git tạo có chuỗi thường xuyên hơn IN_CREATE
-> IN_MODIFY
-> IN_CLOSE_WRITE
(Tôi không xem các IN_OPEN
sự kiện).
Đây là bên trong docker trên MacOS, nhưng tôi đã thấy bằng chứng tương tự trên docker trên Linux trong một hệ thống từ xa, vì vậy sự nghi ngờ của tôi là khía cạnh MacOS không liên quan. Tôi đang thấy điều này nếu xem và git clone
ở trong cùng một container.
Những câu hỏi của tôi:
Tại sao những sự kiện này bị thiếu trên các tập tin này?
Có thể làm gì về nó? Cụ thể, làm thế nào tôi có thể đáp ứng với việc hoàn thành ghi vào các tệp này? Lưu ý: lý tưởng là tôi muốn phản hồi khi viết "xong" để tránh không cần thiết / (không chính xác) tải lên văn bản "chưa hoàn thành".
Chỉnh sửa: Đọc https://developer.ibm.com/tutorials/l-inotify/ có vẻ như những gì tôi thấy phù hợp với
- một tệp tạm thời riêng biệt, với tên như
tmp_pack_hBV4Alz
, được tạo, sửa đổi và đóng; - một liên kết cứng được tạo ra cho tập tin này, với
.pack
tên cuối cùng ; tmp_pack_hBV4Alz
tên ban đầu bị xóa.
Tôi nghĩ rằng vấn đề của tôi, đó là cố gắng sử dụng inotify như một trình kích hoạt để tải lên các tệp, sau đó giảm để nhận thấy rằng .pack
tệp là một liên kết cứng đến một tệp khác và tải lên trong trường hợp này?