aboutsummaryrefslogtreecommitdiff
path: root/src/app/api/worktrees/deferred.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-06-29 18:09:25 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-06-29 18:09:25 +0300
commit1a4e94e57e181379e2ed42d63a49fbc56ed1dba4 (patch)
tree0319544374f1149a405259070b90df9d62854789 /src/app/api/worktrees/deferred.rs
parenta937f7e85bbf8780c6030c57f48dab2168bca932 (diff)
refactor: route tui mutations through runtime authority
Diffstat (limited to 'src/app/api/worktrees/deferred.rs')
-rw-r--r--src/app/api/worktrees/deferred.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/app/api/worktrees/deferred.rs b/src/app/api/worktrees/deferred.rs
index f63a47fd..516e9455 100644
--- a/src/app/api/worktrees/deferred.rs
+++ b/src/app/api/worktrees/deferred.rs
@@ -366,6 +366,12 @@ impl App {
self.pending_api_worktree_creates.remove(&checkout_key);
if let Err(err) = result.result {
+ if let Some(create) = &mut self.state.worktree_create {
+ if create.checkout_path == result.path {
+ create.creating = false;
+ create.error = Some(err.clone());
+ }
+ }
Self::send_api_response(
api.respond_to,
encode_error(api.id, "worktree_create_failed", err),
@@ -421,6 +427,17 @@ impl App {
ws.set_custom_name(label);
}
}
+ if self
+ .state
+ .worktree_create
+ .as_ref()
+ .is_some_and(|create| create.checkout_path == result.path)
+ {
+ self.state.worktree_create = None;
+ self.state.name_input.clear();
+ self.state.name_input_replace_on_type = false;
+ self.state.mode = crate::app::Mode::Terminal;
+ }
self.state.mark_session_dirty();
if created_workspace {
self.emit_workspace_open_events(ws_idx);
@@ -492,6 +509,17 @@ impl App {
} else {
"worktree_remove_failed"
};
+ if let Some(remove) = &mut self.state.worktree_remove {
+ if remove.workspace_id == result.workspace_id && remove.path == result.path {
+ remove.removing = false;
+ if code == "dirty_worktree_requires_force" && !remove.force_confirmation {
+ remove.force_confirmation = true;
+ remove.error = None;
+ } else {
+ remove.error = Some(message.clone());
+ }
+ }
+ }
Self::send_api_response(api.respond_to, encode_error(api.id, code, message));
return;
}
@@ -554,6 +582,16 @@ impl App {
worktree,
result.forced,
);
+ if self.state.worktree_remove.as_ref().is_some_and(|remove| {
+ remove.workspace_id == result.workspace_id && remove.path == result.path
+ }) {
+ self.state.worktree_remove = None;
+ self.state.mode = if self.state.active.is_some() {
+ crate::app::Mode::Terminal
+ } else {
+ crate::app::Mode::Navigate
+ };
+ }
let response = encode_success(
api.id,
ResponseResult::WorktreeRemoved {