From d79fd746a96ddb5642939c9727baefce642d78e6 Mon Sep 17 00:00:00 2001 From: akbash Date: Tue, 25 Aug 2026 23:44:56 +0300 Subject: fix: require explicit workspace group close (#3206) refs #2874 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> --- src/cli/runtime.rs | 11 ++++------- src/cli/workspace.rs | 21 ++++++++++++--------- 2 files changed, 16 insertions(+), 16 deletions(-) (limited to 'src/cli') diff --git a/src/cli/runtime.rs b/src/cli/runtime.rs index 16d2d8b3..793ca24e 100644 --- a/src/cli/runtime.rs +++ b/src/cli/runtime.rs @@ -2,8 +2,8 @@ use crate::api::schema::{ EmptyParams, Method, PaneFocusDirectionParams, PaneInputSetParams, PaneMoveParams, PaneRenameParams, PaneResizeParams, PaneSplitParams, PaneSwapParams, PaneTarget, PaneZoomParams, Request, TabCreateParams, TabListParams, TabRenameParams, TabTarget, - WorkspaceCreateParams, WorkspaceRenameParams, WorkspaceTarget, WorktreeCreateParams, - WorktreeListParams, WorktreeOpenParams, WorktreeRemoveParams, + WorkspaceCloseParams, WorkspaceCreateParams, WorkspaceRenameParams, WorkspaceTarget, + WorktreeCreateParams, WorktreeListParams, WorktreeOpenParams, WorktreeRemoveParams, }; fn print_method_response(id: &'static str, method: Method) -> std::io::Result { @@ -42,11 +42,8 @@ pub(super) fn workspace_rename(params: WorkspaceRenameParams) -> std::io::Result print_method_response("cli:workspace:rename", Method::WorkspaceRename(params)) } -pub(super) fn workspace_close(workspace_id: String) -> std::io::Result { - print_method_response( - "cli:workspace:close", - Method::WorkspaceClose(WorkspaceTarget { workspace_id }), - ) +pub(super) fn workspace_close(params: WorkspaceCloseParams) -> std::io::Result { + print_method_response("cli:workspace:close", Method::WorkspaceClose(params)) } pub(super) fn tab_list(params: TabListParams) -> std::io::Result { diff --git a/src/cli/workspace.rs b/src/cli/workspace.rs index 525fc971..c24c9b73 100644 --- a/src/cli/workspace.rs +++ b/src/cli/workspace.rs @@ -225,16 +225,19 @@ fn workspace_report_metadata(args: &[String]) -> std::io::Result { } fn workspace_close(args: &[String]) -> std::io::Result { - let Some(raw_workspace_id) = args.first() else { - eprintln!("usage: herdr workspace close "); - return Ok(2); + let (raw_workspace_id, close_group) = match args { + [workspace_id] => (workspace_id, false), + [workspace_id, flag] if flag == "--group" => (workspace_id, true), + _ => { + eprintln!("usage: herdr workspace close [--group]"); + return Ok(2); + } }; - if args.len() != 1 { - eprintln!("usage: herdr workspace close "); - return Ok(2); - } - super::runtime::workspace_close(super::normalize_workspace_id(raw_workspace_id)) + super::runtime::workspace_close(crate::api::schema::WorkspaceCloseParams { + workspace_id: super::normalize_workspace_id(raw_workspace_id), + close_group, + }) } fn print_workspace_help() { @@ -245,5 +248,5 @@ fn print_workspace_help() { eprintln!(" herdr workspace focus "); eprintln!(" herdr workspace rename