aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-22 02:21:12 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-22 02:23:35 +0300
commit0148c1379b76c5c0a9d05588c07dcb06ec32f93f (patch)
tree554766d959c738ca2aa433c3d4b4a7de25568008 /src/server
parenta9ff4012bdca0dbdbc77bc6e53a430689fc899be (diff)
feat: add git worktree workspace management
refs #137
Diffstat (limited to 'src/server')
-rw-r--r--src/server/headless.rs43
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();