From 957ad0fe8fa2ad544cb1aac243bc18f128b8ef87 Mon Sep 17 00:00:00 2001 From: isvoker Date: Mon, 27 Jan 2025 15:30:31 +0700 Subject: [PATCH 1/2] Fixed an issue with passing arguments to windows OS --- warp-runner/src/executor.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/warp-runner/src/executor.rs b/warp-runner/src/executor.rs index 435f465..95affeb 100644 --- a/warp-runner/src/executor.rs +++ b/warp-runner/src/executor.rs @@ -56,8 +56,10 @@ fn do_execute(target: &Path, args: &[String]) -> io::Result { if is_script(target) { let mut cmd_args = Vec::with_capacity(args.len() + 2); cmd_args.push("/c".to_string()); - cmd_args.push(target_str.to_string()); - cmd_args.extend_from_slice(&args); + cmd_args.push(format!("\"{}\"", target_str)); + for arg in args { + cmd_args.push(format!("\"{}\"", arg)); + } Ok(Command::new("cmd") .args(cmd_args) From 25cd2dbf8963ef628f38b7bf74ebc3d25d2c394a Mon Sep 17 00:00:00 2001 From: isvoker Date: Mon, 27 Jan 2025 19:05:33 +0700 Subject: [PATCH 2/2] Fixed an issue with passing arguments to windows OS --- warp-runner/src/executor.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/warp-runner/src/executor.rs b/warp-runner/src/executor.rs index 95affeb..181d5dc 100644 --- a/warp-runner/src/executor.rs +++ b/warp-runner/src/executor.rs @@ -9,6 +9,8 @@ use std::os::unix::fs::PermissionsExt; use std::path::Path; use std::process::Command; use std::process::Stdio; +#[cfg(target_family = "windows")] +use std::os::windows::process::CommandExt; pub fn execute(target: &Path) -> io::Result { trace!("target={:?}", target); @@ -54,15 +56,14 @@ fn do_execute(target: &Path, args: &[String]) -> io::Result { let target_str = target.as_os_str().to_str().unwrap(); if is_script(target) { - let mut cmd_args = Vec::with_capacity(args.len() + 2); - cmd_args.push("/c".to_string()); - cmd_args.push(format!("\"{}\"", target_str)); + let mut cmd = format!(r#""{target_str}""#); for arg in args { - cmd_args.push(format!("\"{}\"", arg)); + cmd.push_str(&format!(" \"{}\"", arg)); } - + trace!("cmd={:?}", cmd); Ok(Command::new("cmd") - .args(cmd_args) + .arg("/c") + .raw_arg(format!("\"{}\"", cmd)) .stdin(Stdio::inherit()) .stdout(Stdio::inherit()) .stderr(Stdio::inherit())