From 937d7aa72a4195c187e04ff056eceec640d7aeb6 Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Fri, 5 Dec 2025 09:22:34 -0800 Subject: [PATCH] Fix Git invokation on Windows (#313) --- src-tauri/yaak-git/src/binary.rs | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/src-tauri/yaak-git/src/binary.rs b/src-tauri/yaak-git/src/binary.rs index 54258203..a74a031b 100644 --- a/src-tauri/yaak-git/src/binary.rs +++ b/src-tauri/yaak-git/src/binary.rs @@ -1,16 +1,38 @@ -use crate::error::Error::GitNotFound; -use crate::error::Result; use std::path::Path; -use std::process::Command; +use std::process::{Command, Stdio}; +use crate::error::Result; + +#[cfg(target_os = "windows")] +use std::os::windows::process::CommandExt; +use crate::error::Error::GitNotFound; + +#[cfg(target_os = "windows")] +const CREATE_NO_WINDOW: u32 = 0x0800_0000; pub(crate) fn new_binary_command(dir: &Path) -> Result { - let status = Command::new("git").arg("--version").status(); + // 1. Probe that `git` exists and is runnable + let mut probe = Command::new("git"); + probe.arg("--version").stdin(Stdio::null()).stdout(Stdio::null()).stderr(Stdio::null()); - if let Err(_) = status { + #[cfg(target_os = "windows")] + { + probe.creation_flags(CREATE_NO_WINDOW); + } + + let status = probe.status().map_err(|_| GitNotFound)?; + + if !status.success() { return Err(GitNotFound); } + // 2. Build the reusable git command let mut cmd = Command::new("git"); cmd.arg("-C").arg(dir); + + #[cfg(target_os = "windows")] + { + cmd.creation_flags(CREATE_NO_WINDOW); + } + Ok(cmd) }