Skip to main content

file_hash

Function file_hash 

Source
pub fn file_hash(path: &Path, verbose: bool) -> Option<u64>
Expand description

Хэш содержимого файла (u64) для дедупликации событий notify.

Один «логический» записывающий вызов (например, сохранение в редакторе) генерирует несколько событий PollWatcher — Modify, Modify(Data), Modify(Metadata). Ключевой порядок: хэширование выполняется ПОСЛЕ debounce, а не до него — потому что Add-Content-подобная запись идёт в два этапа (append + flush), и первое событие видит неполное содержимое. Если бы хэш применялся до debounce, hash1 ≠ hash2, и оба события прошли бы → двойной reload. После debounce содержимое уже финальное, и повторные события дают одинаковый хэш → отфильтровываются.

При временных ошибках чтения (PermissionDenied на частично-записанном файле, NotFound в момент удаления) функция пробует снова до [FILE_HASH_MAX_ATTEMPTS] раз, ожидая [FILE_HASH_RETRY_INTERVAL] между попытками. Если все попытки упали (файл реально недоступен) — возвращает None; событие тогда НЕ дедуплицируется и обрабатывается как изменение (консервативно: лучше лишний reload, чем пропущенное изменение).