Я наблюдаю за изменениями файлов, используя события inotify (как это происходит с Python, вызывая lib c).
Для некоторых файлов во время git clone
я вижу что-то странное : Я вижу событие IN_CREATE
и через ls
вижу, что в файле есть содержимое, однако я никогда не вижу IN_MODIFY
или IN_CLOSE_WRITE
. Это вызывает у меня проблемы, поскольку я хотел бы ответить на IN_CLOSE_WRITE
в файлах: в частности, чтобы начать загрузку содержимого файла.
Файлы, которые ведут себя странно, находятся в каталоге .git/objects/pack
, и они заканчиваются на .pack
или .idx
. Другие файлы, которые git создает, имеют более регулярную цепочку IN_CREATE
-> IN_MODIFY
-> IN_CLOSE_WRITE
(я не наблюдаю за IN_OPEN
событиями).
Это внутри docker на MacOS, но я видел доказательства того же на docker на Linux в удаленной системе, поэтому я подозреваю, что аспект MacOS не имеет значения. Я вижу это, если смотреть и git clone
находятся в том же docker контейнере.
Мои вопросы:
Почему эти события отсутствует в этих файлах?
Что с этим можно сделать? В частности, как я могу ответить на завершение записи в эти файлы? Примечание: в идеале я хотел бы ответить, когда запись «закончена», чтобы избежать ненужной / (неправильной) загрузки «незаконченной» записи.
Редактировать: Чтение https://developer.ibm.com/tutorials/l-inotify/ похоже, что то, что я вижу, соответствует
- отдельному временному файлу с именем вроде
tmp_pack_hBV4Alz
, который создается, изменяется и закрывается; - hard ссылка создается для этого файла с окончательным
.pack
именем; - оригинальное
tmp_pack_hBV4Alz
имя удалено.
Я думаю, что мой проблема, которая пытается использовать inotify в качестве триггера для загрузки файлов, а затем сводится к тому, чтобы заметить, что файл .pack
является жесткой ссылкой на другой файл, и к загрузке в этом случае?