Bump `version` whenever any file under `dir` changes. Mtime poll, no watcher dependency.
(dir: PathBuf, version: Arc<AtomicU64>)
| 92 | |
| 93 | /// Bump `version` whenever any file under `dir` changes. Mtime poll, no watcher dependency. |
| 94 | fn spawn_watcher(dir: PathBuf, version: Arc<AtomicU64>) { |
| 95 | std::thread::spawn(move || { |
| 96 | let mut last = fingerprint(&dir); |
| 97 | loop { |
| 98 | std::thread::sleep(Duration::from_millis(400)); |
| 99 | let now = fingerprint(&dir); |
| 100 | if now != last { |
| 101 | last = now; |
| 102 | version.fetch_add(1, Ordering::Relaxed); |
| 103 | } |
| 104 | } |
| 105 | }); |
| 106 | } |
| 107 | |
| 108 | /// Cheap directory fingerprint: a rolling sum of file mtimes and sizes. |
| 109 | fn fingerprint(dir: &Path) -> u64 { |