diff options
| author | 魏曹先生 <1992414357@qq.com> | 2025-10-29 15:23:48 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2025-10-29 15:23:48 +0800 |
| commit | 805a2e38b09267f57213310af602c4ad4b51a5ac (patch) | |
| tree | 7f4d15f1da046609411df58b0a7e1d99b1affc01 /crates/vcs_actions | |
| parent | b48073e4c9a2ca80dd0503efc5b6ab121d504028 (diff) | |
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.
Diffstat (limited to 'crates/vcs_actions')
| -rw-r--r-- | crates/vcs_actions/src/registry/client_registry.rs | 34 |
1 files changed, 34 insertions, 0 deletions
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( |
