diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-22 02:21:12 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-22 02:23:35 +0300 |
| commit | 0148c1379b76c5c0a9d05588c07dcb06ec32f93f (patch) | |
| tree | 554766d959c738ca2aa433c3d4b4a7de25568008 /src/server | |
| parent | a9ff4012bdca0dbdbc77bc6e53a430689fc899be (diff) | |
feat: add git worktree workspace management
refs #137
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/headless.rs | 43 |
1 files changed, 42 insertions, 1 deletions
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(); |
