pub struct WorktreesRegistry { /* private fields */ }Expand description
The cross-window worktree registry: the in-memory, TTL-reaped set of open
windows. Hosted by
WorktreesService.
Implementations§
Source§impl WorktreesRegistry
impl WorktreesRegistry
Sourcepub fn subscribe_changes(&self) -> Receiver<u64>
pub fn subscribe_changes(&self) -> Receiver<u64>
A change-notification receiver for the push subscription: it observes a
new value each time the visible window set changes (see changes and
bump). Created with the current version already marked seen, so the
first watch::Receiver::changed resolves on the next change — the
subscriber sends its own initial snapshot up front and then waits for
deltas (#1267).
Sourcepub fn register(&self, req: RegisterRequest)
pub fn register(&self, req: RegisterRequest)
Records (upserts) a window registration. Reaps stale entries first, then
— only when a genuinely new key would grow the map past [MAX_WINDOWS] —
evicts the longest-silent entry. Infallible: an upsert never evicts, and
callers validate the key before reaching here.
Sourcepub fn heartbeat(&self, key: &str) -> bool
pub fn heartbeat(&self, key: &str) -> bool
Refreshes a window’s liveness. Returns whether the key was known: a
false tells a window that started before the daemon — or survived a
daemon restart — to re-register, since the registry is in-memory and
has no record of it.
Sourcepub fn unregister(&self, key: &str) -> bool
pub fn unregister(&self, key: &str) -> bool
Drops a window’s registration. Returns whether an entry was present.
Sourcepub fn mark_close_pending(&self, key: &str)
pub fn mark_close_pending(&self, key: &str)
Records a pending “close yourself” directive for key, to be surfaced on
that window’s next heartbeat. Set by the close op when signalling a
window it can only reply to. Idempotent; infallible.
Sourcepub fn take_close_pending(&self, key: &str) -> bool
pub fn take_close_pending(&self, key: &str) -> bool
Takes (returns and clears) key’s pending close directive. Called on
each heartbeat so the directive fires exactly once; a false means no
close is pending.
Sourcepub fn list(&self) -> Vec<WindowEntry>
pub fn list(&self) -> Vec<WindowEntry>
Reaps stale entries, then returns the live set sorted for deterministic output. Holds the lock only for pure-CPU work.
Like the other reads (open_folders,
first_folder) this reaps but never
bumps: the only observer of a read-path reap is the push
subscription’s own re-snapshot (or status/menu), and the
subscription’s periodic tick already re-samples read-only staleness — so
bumping here would only make the subscription wake itself (#1267).
Sourcepub fn first_folder(&self, key: &str) -> Option<PathBuf>
pub fn first_folder(&self, key: &str) -> Option<PathBuf>
The first workspace folder of a still-live window, if it has one. Used by
the tray “focus” action to resolve a key to a folder to open. Does not
reap — a menu action races the reaper either way, and the caller handles
a None (the window may have closed).
Sourcepub fn open_folders(&self) -> Vec<PathBuf>
pub fn open_folders(&self) -> Vec<PathBuf>
Snapshots the distinct workspace folders across all live windows — the seed set the adapter resolves to repositories (each folder → its git common dir → repo root) to enumerate every worktree per repo (#1265).
Reaps stale entries first, then returns the folders sorted and
deduplicated. Like list it is pure CPU under the lock:
the git resolution the “distinct repos” derivation needs is disk I/O and
stays in the adapter, off the registry lock, honouring the
Mutex-never-across-.await invariant.