Я переглядаю файли для змін, використовуючи події inotify (як це трапляється, з Python, викликаючи libc).
Для деяких файлів під час a 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подіями).
Це всередині докера на MacOS, але я бачив докази того ж на docker в Linux у віддаленій системі, тому моє підозра в аспекті MacOS не має значення. Я бачу це, якщо дивлюся і git cloneзнаходяться в одному докерному контейнері.
Мої запитання:
Чому ці події відсутні у цих файлах?
Що з цим можна зробити? Зокрема, як я можу відповісти на завершення запису до цих файлів? Примітка: в ідеалі я хотів би відповісти, коли написання "закінчено", щоб уникнути зайвого / (неправильного) завантаження "незакінченого" написання.
Редагувати: Читання https://developer.ibm.com/tutorials/l-inotify/ виглядає так, що те, що я бачу, відповідає
- окремий тимчасовий файл із ім'ям
tmp_pack_hBV4Alz, яке створюється, змінюється та закривається; - важко буде створена посилання на цей файл, з остаточним
.packназвою; - оригінальне
tmp_pack_hBV4Alzім’я видалено.
Я думаю, що моя проблема, яка намагається використовувати inotify як тригер для завантаження файлів, потім зводиться до того, що помічає, що .packфайл є твердим посиланням на інший файл, і завантаження в цьому випадку?