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, чем пропущенное изменение).