mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-02-16 12:47:46 +01:00
31 lines
993 B
Rust
31 lines
993 B
Rust
use crate::error::Error::GitNotFound;
|
|
use crate::error::Result;
|
|
use std::path::Path;
|
|
use std::process::Stdio;
|
|
use tokio::process::Command;
|
|
use yaak_common::command::new_xplatform_command;
|
|
|
|
/// Create a git command that runs in the specified directory
|
|
pub(crate) async fn new_binary_command(dir: &Path) -> Result<Command> {
|
|
let mut cmd = new_binary_command_global().await?;
|
|
cmd.arg("-C").arg(dir);
|
|
Ok(cmd)
|
|
}
|
|
|
|
/// Create a git command without a specific directory (for global operations)
|
|
pub(crate) async fn new_binary_command_global() -> Result<Command> {
|
|
// 1. Probe that `git` exists and is runnable
|
|
let mut probe = new_xplatform_command("git");
|
|
probe.arg("--version").stdin(Stdio::null()).stdout(Stdio::null()).stderr(Stdio::null());
|
|
|
|
let status = probe.status().await.map_err(|_| GitNotFound)?;
|
|
|
|
if !status.success() {
|
|
return Err(GitNotFound);
|
|
}
|
|
|
|
// 2. Build the reusable git command
|
|
let cmd = new_xplatform_command("git");
|
|
Ok(cmd)
|
|
}
|