aboutsummaryrefslogtreecommitdiff
path: root/CHANGELOG.md
diff options
context:
space:
mode:
authorBozhidar Batsov <bozhidar@toptal.com>2026-04-27 07:58:28 +0000
committerBozhidar Batsov <bozhidar@toptal.com>2026-04-27 07:58:28 +0000
commit28014dae7034fff49f5740b013a426aade7873f3 (patch)
tree5943605789c290b9dbe927520f5cc52527866b58 /CHANGELOG.md
parentd8bbeedd275cea4765555c731b265ce7757ad9e5 (diff)
Coalesce idle-timer flushes in projectile-cache-current-fileHEADmaster
Each call to `projectile-cache-current-file' under persistent caching scheduled a fresh 30-second idle timer that closed over a snapshot of the file list at scheduling time. Opening N files in a session queued N timers; once Emacs went idle they all fired and serialized the cache N times, with the earlier ones writing stale (shorter) lists. Maintain a per-project pending timer in `projectile--pending-cache-flush-timers' instead, cancelling and rescheduling on each new file. The fired callback re-reads the current in-memory cache, so the disk write reflects the final state rather than whichever snapshot the last timer captured.
Diffstat (limited to 'CHANGELOG.md')
-rw-r--r--CHANGELOG.md1
1 files changed, 1 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b40474d..eeccf95 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -42,6 +42,7 @@
* Fix `projectile--other-extension-files` sort comparator ignoring its second argument, producing undefined ordering; replaced with a stable partition.
* Fix `projectile-toggle-project-read-only` operating on the wrong buffer after `add-dir-local-variable` by wrapping in `save-selected-window`.
* Fix `projectile-cache-current-file` calling `projectile-project-root` twice instead of reusing the already-resolved value.
+* Fix `projectile-cache-current-file` queueing one idle timer per opened file, each capturing a stale snapshot of the file list. With persistent caching, opening many files in a session would result in N redundant disk writes after Emacs went idle. A pending flush is now coalesced per project and reads the latest in-memory cache at fire time.
* Fix `projectile-load-project-cache` not recording a cache time, which combined with `projectile-files-cache-expire` made the TTL check immediately re-evict freshly loaded data — every call ended up re-reading the cache file from disk and the data was never reindexed. The cache file's mtime is now used to seed `projectile-projects-cache-time`.
* Fix `projectile-load-project-cache` storing nil in cache on corrupt/empty cache files, preventing future reload attempts.
* Fix `projectile-purge-dir-from-cache` only updating the in-memory cache; with persistent caching the purged directory's files would reappear on the next session. The on-disk cache is now updated as well, matching the behavior of `projectile-purge-file-from-cache`.