Skip to main content

DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/IPC/WindServiceHandlers/Git/
HandleCheckout.rs

1//! `localGit:checkout(operationId, repoPath, treeish, detached?)`.
2//! `Detached=true` adds `--detach` so the caller can land on a
3//! commit hash without creating a tracking branch.
4
5use serde_json::Value;
6
7use crate::IPC::WindServiceHandlers::{
8	Git::Shared::RunGit::Fn as RunGit,
9	Utilities::JsonValueHelpers::{arg_bool, arg_string},
10};
11
12pub async fn Fn(Arguments:Vec<Value>) -> Result<Value, String> {
13	let OperationId = arg_string(&Arguments, 0);
14
15	let RepoPath = arg_string(&Arguments, 1);
16
17	let Treeish = arg_string(&Arguments, 2);
18
19	let Detached = arg_bool(&Arguments, 3);
20
21	if RepoPath.is_empty() || Treeish.is_empty() {
22		return Err("git:checkout requires repoPath and treeish".to_string());
23	}
24
25	let Argv:Vec<String> = if Detached {
26		vec!["checkout".to_string(), "--detach".to_string(), Treeish]
27	} else {
28		vec!["checkout".to_string(), Treeish]
29	};
30
31	let (ExitCode, _, Stderr) = RunGit(&OperationId, &Argv, Some(&RepoPath)).await?;
32
33	if ExitCode != 0 {
34		return Err(format!("git checkout failed: {}", Stderr));
35	}
36
37	Ok(Value::Null)
38}