From 805a2e38b09267f57213310af602c4ad4b51a5ac Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Wed, 29 Oct 2025 15:23:48 +0800 Subject: Add LocalWorkspace and UserDirectory to client ActionContext Initialize and insert Arc-wrapped LocalWorkspace and UserDirectory instances into the ActionContext for client environment actions. This provides workspace and user directory data to actions running in client mode. The LocalWorkspace is initialized from the current directory's local config, while UserDirectory uses the current document directory. Both are wrapped in Arc for efficient sharing across the action execution. --- crates/vcs_actions/src/registry/client_registry.rs | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'crates/vcs_actions/src/registry') diff --git a/crates/vcs_actions/src/registry/client_registry.rs b/crates/vcs_actions/src/registry/client_registry.rs index 9769750..982a9f9 100644 --- a/crates/vcs_actions/src/registry/client_registry.rs +++ b/crates/vcs_actions/src/registry/client_registry.rs @@ -1,5 +1,12 @@ +use std::sync::Arc; + use action_system::{action::ActionContext, action_pool::ActionPool}; +use cfg_file::config::ConfigFile; use tcp_connection::error::TcpTargetError; +use vcs_data::data::{ + local::{LocalWorkspace, config::LocalConfig}, + user::UserDirectory, +}; use crate::{ actions::local_actions::register_set_upstream_vault_action, @@ -36,6 +43,33 @@ async fn on_proc_begin( let action_name = ctx.action_name().to_string(); let action_args_json = ctx.action_args_json().clone(); + // Insert LocalWorkspace Arc + let Ok(local_config) = LocalConfig::read().await else { + return Err(TcpTargetError::NotFound( + "The current directory does not have a local workspace".to_string(), + )); + }; + let local_workspace = match LocalWorkspace::init_current_dir(local_config) { + Some(workspace) => workspace, + None => { + return Err(TcpTargetError::NotFound(format!( + "Failed to initialize local workspace.", + ))); + } + }; + let local_workspace_arc = Arc::new(local_workspace); + ctx.insert_arc_data(local_workspace_arc); + + // Insert UserDirectory Arc + let Some(user_directory) = UserDirectory::current_doc_dir() else { + return Err(TcpTargetError::NotFound( + "The user directory does not exist.".to_string(), + )); + }; + + let user_directory_arc = Arc::new(user_directory); + ctx.insert_arc_data(user_directory_arc); + // Get instance let Some(instance) = ctx.instance() else { return Err(TcpTargetError::Unsupported( -- cgit From 50945b098e3f6ff16f3f4cf25c2835ddf1e7b3a8 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Wed, 29 Oct 2025 15:25:57 +0800 Subject: Apply clippy suggestions - Use dereferenced UUID instead of cloning - Simplify error message formatting --- crates/vcs_actions/src/registry/client_registry.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'crates/vcs_actions/src/registry') diff --git a/crates/vcs_actions/src/registry/client_registry.rs b/crates/vcs_actions/src/registry/client_registry.rs index 982a9f9..6f820e6 100644 --- a/crates/vcs_actions/src/registry/client_registry.rs +++ b/crates/vcs_actions/src/registry/client_registry.rs @@ -52,9 +52,7 @@ async fn on_proc_begin( let local_workspace = match LocalWorkspace::init_current_dir(local_config) { Some(workspace) => workspace, None => { - return Err(TcpTargetError::NotFound(format!( - "Failed to initialize local workspace.", - ))); + return Err(TcpTargetError::NotFound("Failed to initialize local workspace.".to_string())); } }; let local_workspace_arc = Arc::new(local_workspace); -- cgit