From bf3cab6ae6a5d42991d214ab80e487aade4eb21a Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Mon, 12 Jan 2026 17:05:48 +0200 Subject: [PATCH] Fix worktree trust not applied on window reuse (#46623) New workspace/window creates a different `WeakEntity` for the same path, which was not considered before. Closes https://github.com/zed-industries/zed/issues/46318 Release Notes: - Fixed worktree trust not applied in window reuse --- crates/project/src/trusted_worktrees.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/crates/project/src/trusted_worktrees.rs b/crates/project/src/trusted_worktrees.rs index f0b963c2b116ce79be741552ad94f9b5323cd5c6..c11cbcd9a8feee6b1ce6214718815ac4ae113fb1 100644 --- a/crates/project/src/trusted_worktrees.rs +++ b/crates/project/src/trusted_worktrees.rs @@ -306,6 +306,9 @@ impl TrustedWorktreesStore { self.restricted.get_mut(&weak_worktree_store) { restricted_worktrees.remove(worktree_id); + if restricted_worktrees.is_empty() { + self.restricted.remove(&weak_worktree_store); + } }; if let Some(worktree) = @@ -614,7 +617,8 @@ impl TrustedWorktreesStore { &mut self, cx: &mut Context, ) -> HashMap, HashSet> { - self.trusted_paths + let new_trusted_paths = self + .trusted_paths .iter() .filter_map(|(worktree_store, paths)| { let host = self.worktree_stores.get(&worktree_store)?.clone(); @@ -632,13 +636,16 @@ impl TrustedWorktreesStore { .collect::>(); Some((host, abs_paths)) }) - .chain(self.db_trusted_paths.clone()) + .chain(self.db_trusted_paths.drain()) .fold(HashMap::default(), |mut acc, (host, paths)| { acc.entry(host) .or_insert_with(HashSet::default) .extend(paths); acc - }) + }); + + self.db_trusted_paths = new_trusted_paths.clone(); + new_trusted_paths } fn add_worktree_store( @@ -647,6 +654,8 @@ impl TrustedWorktreesStore { remote_host: Option, cx: &mut Context, ) { + self.worktree_stores + .retain(|worktree_store, _| worktree_store.is_upgradable()); let weak_worktree_store = worktree_store.downgrade(); self.worktree_stores .insert(weak_worktree_store.clone(), remote_host.clone());