diff --git a/src/ops/cmd.rs b/src/ops/cmd.rs index 8f965f996..c01d5291e 100644 --- a/src/ops/cmd.rs +++ b/src/ops/cmd.rs @@ -20,20 +20,14 @@ fn do_call( return Ok(true); } let mut iter = command.iter(); - let origin_cmd_name: &String = iter.next().unwrap(); - - // convert to absolute path if path is existed as first and avoid to use Command::current_dir - let cmd_name = path.map_or_else( - || origin_cmd_name.clone(), - |p| { - dunce::canonicalize(p.join(origin_cmd_name)) - .map(|path| path.to_string_lossy().into_owned()) - .unwrap_or_else(|_| p.join(origin_cmd_name).to_string_lossy().into_owned()) - }, - ); + let cmd_name = iter.next().unwrap(); let mut cmd = Command::new(&cmd_name); + if let Some(p) = path { + cmd.current_dir(p); + } + if let Some(e) = envs { cmd.envs(e.iter()); } @@ -44,12 +38,14 @@ fn do_call( } } + let ctx_dir = path.map_or(String::new(), |p| format!(" within {}", p.display())); + let mut child = cmd .spawn() - .map_err(|e| anyhow::format_err!("failed to launch `{cmd_name}`: {e}"))?; + .map_err(|e| anyhow::format_err!("failed to launch `{cmd_name}{ctx_dir}`: {e}"))?; let result = child .wait() - .map_err(|e| anyhow::format_err!("failed to launch `{cmd_name}`: {e}"))?; + .map_err(|e| anyhow::format_err!("failed to launch `{cmd_name}{ctx_dir}`: {e}"))?; Ok(result.success()) }