Mountain/IPC/WindServiceHandlers/Git/
HandleClone.rs1#![allow(non_snake_case)]
2
3use serde_json::Value;
8
9use crate::IPC::WindServiceHandlers::Git::Shared::RunGit;
10
11pub async fn HandleClone(Arguments:Vec<Value>) -> Result<Value, String> {
12 let OperationId = Arguments.first().and_then(Value::as_str).unwrap_or("").to_string();
13 let CloneURL = Arguments.get(1).and_then(Value::as_str).unwrap_or("").to_string();
14 let TargetPath = Arguments.get(2).and_then(Value::as_str).unwrap_or("").to_string();
15 let Reference = Arguments.get(3).and_then(Value::as_str).map(str::to_string);
16
17 if CloneURL.is_empty() || TargetPath.is_empty() {
18 return Err("git:clone requires cloneUrl and targetPath".to_string());
19 }
20
21 let mut Argv:Vec<String> = vec!["clone".to_string()];
22 if let Some(Ref) = Reference {
23 Argv.push("--branch".to_string());
24 Argv.push(Ref);
25 }
26 Argv.push("--".to_string());
27 Argv.push(CloneURL);
28 Argv.push(TargetPath);
29
30 let (ExitCode, _, Stderr) = RunGit(&OperationId, &Argv, None).await?;
31 if ExitCode != 0 {
32 return Err(format!("git clone failed: {}", Stderr));
33 }
34 Ok(Value::Null)
35}