diff --git a/crates/server/src/rpc.rs b/crates/server/src/rpc.rs index 2e60f01436..0237d4a1a8 100644 --- a/crates/server/src/rpc.rs +++ b/crates/server/src/rpc.rs @@ -215,9 +215,17 @@ impl Server { mut self: Arc, request: TypedEnvelope, ) -> tide::Result<()> { - let mut state = self.state_mut(); - let user_id = state.user_id_for_connection(request.sender_id)?; - state.register_project(request.sender_id, user_id); + let project_id = { + let mut state = self.state_mut(); + let user_id = state.user_id_for_connection(request.sender_id)?; + state.register_project(request.sender_id, user_id) + }; + self.peer + .respond( + request.receipt(), + proto::RegisterProjectResponse { project_id }, + ) + .await?; Ok(()) } @@ -281,10 +289,10 @@ impl Server { let worktrees = joined .project .worktrees - .values() - .filter_map(|worktree| { + .iter() + .filter_map(|(id, worktree)| { worktree.share.as_ref().map(|share| proto::Worktree { - id: project_id, + id: *id, root_name: worktree.root_name.clone(), entries: share.entries.values().cloned().collect(), }) @@ -1062,7 +1070,7 @@ mod tests { .await .unwrap(); - // Join that project as client B, and see that a guest has joined as client A. + // Join that project as client B let project_b = Project::remote( project_id, client_b.clone(), @@ -1143,8 +1151,8 @@ mod tests { .condition(&cx_a, |tree, cx| !tree.has_open_buffer("b.txt", cx)) .await; - // Dropping the worktree removes client B from client A's collaborators. - cx_b.update(move |_| drop(worktree_b)); + // Dropping the client B's project removes client B from client A's collaborators. + cx_b.update(move |_| drop(project_b)); project_a .condition(&cx_a, |project, _| project.collaborators().is_empty()) .await; @@ -1155,12 +1163,12 @@ mod tests { cx_b.update(zed::contacts_panel::init); let lang_registry = Arc::new(LanguageRegistry::new()); let fs = Arc::new(FakeFs::new()); + cx_a.foreground().forbid_parking(); // Connect to a server as 2 clients. let mut server = TestServer::start().await; let client_a = server.create_client(&mut cx_a, "user_a").await; let client_b = server.create_client(&mut cx_b, "user_b").await; - cx_a.foreground().forbid_parking(); // Share a project as client A fs.insert_tree( @@ -1224,14 +1232,14 @@ mod tests { } #[gpui::test] - async fn test_propagate_saves_and_fs_changes_in_shared_worktree( + async fn test_propagate_saves_and_fs_changes( mut cx_a: TestAppContext, mut cx_b: TestAppContext, mut cx_c: TestAppContext, ) { - cx_a.foreground().forbid_parking(); let lang_registry = Arc::new(LanguageRegistry::new()); let fs = Arc::new(FakeFs::new()); + cx_a.foreground().forbid_parking(); // Connect to a server as 3 clients. let mut server = TestServer::start().await;