From 0148c1379b76c5c0a9d05588c07dcb06ec32f93f Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Fri, 22 May 2026 02:21:12 +0300 Subject: feat: add git worktree workspace management refs #137 --- src/server/headless.rs | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) (limited to 'src/server') diff --git a/src/server/headless.rs b/src/server/headless.rs index 842ded80..5c6a1ec6 100644 --- a/src/server/headless.rs +++ b/src/server/headless.rs @@ -25,7 +25,7 @@ use std::time::{Duration, Instant}; use ratatui::layout::Rect; use tokio::sync::mpsc; -use tracing::{debug, info, warn}; +use tracing::{debug, error, info, warn}; use base64::Engine; use bytes::Bytes; @@ -251,6 +251,47 @@ impl HeadlessServer { needs_render = true; } + if let Some(ws_idx) = self.app.state.request_new_linked_worktree.take() { + self.app.open_new_linked_worktree_dialog(ws_idx); + needs_render = true; + } + + if let Some(ws_idx) = self.app.state.request_open_existing_worktree.take() { + self.app.open_existing_worktree_dialog(ws_idx); + needs_render = true; + } + + if let Some(cwd) = self.app.state.request_new_workspace_cwd.take() { + if let Err(err) = self.app.create_workspace_with_options(cwd, true) { + error!(err = %err, "failed to create workspace at requested cwd"); + self.app.state.mode = app::Mode::Navigate; + } + needs_render = true; + } + + if let Some(ws_idx) = self.app.state.request_remove_linked_worktree.take() { + self.app.open_remove_linked_worktree_confirmation(ws_idx); + needs_render = true; + } + + if self.app.state.request_submit_worktree_create { + self.app.state.request_submit_worktree_create = false; + self.app.start_worktree_add(); + needs_render = true; + } + + if self.app.state.request_submit_worktree_open { + self.app.state.request_submit_worktree_open = false; + self.app.open_selected_existing_worktree(); + needs_render = true; + } + + if self.app.state.request_submit_worktree_remove { + self.app.state.request_submit_worktree_remove = false; + self.app.start_worktree_remove(); + needs_render = true; + } + if self.app.state.request_reload_config { self.app.state.request_reload_config = false; self.reload_server_config(); -- cgit v1.2.3