Context
With Refresh explorer in place, this slice makes the Explorer keep itself up to date: each expanded folder is watched, and when entries appear, disappear or are renamed in it, that folder refreshes by itself after a short settling delay, the same way open tabs already notice disk changes. Pitch: #292. Needs #332 merged first: it reuses that task's refresh, which keeps expansion and selection.
Acceptance criteria
Tests
- One non-recursive watcher per expanded folder; collapsing a folder, or removing it, disposes its watcher; closing the workspace disposes all.
- A burst of events for one folder produces one refresh (debounced as
DiskWatcher does); events for different folders refresh each.
- Cap of 64 watchers: past it the most recently expanded folders are watched and the oldest released.
- A watcher that fails to start, or errors later, is logged and dropped without throwing.
- Refreshes are marshalled onto the UI thread.
Out of scope
- Recursive watching of the workspace, or watching collapsed folders.
- Settings for excludes, polling, or the cap.
- Any change to how open tabs react to disk changes.
- Git status in the tree.
Context
With Refresh explorer in place, this slice makes the Explorer keep itself up to date: each expanded folder is watched, and when entries appear, disappear or are renamed in it, that folder refreshes by itself after a short settling delay, the same way open tabs already notice disk changes. Pitch: #292. Needs #332 merged first: it reuses that task's refresh, which keeps expansion and selection.
Acceptance criteria
git switchto a branch that adds and removes files in expanded folders leaves the tree matching the new branch, without flicker or a visible storm of redraws.Tests
DiskWatcherdoes); events for different folders refresh each.Out of scope