use std::path::Path; pub(crate) fn shell_single_quote(value: &str) -> String { format!("'{}'", value.replace('\'', "'\"'\"'")) } pub(crate) fn hook_command(hook_path: &Path, action: Option<&str>) -> String { let path = hook_path.display().to_string(); #[cfg(windows)] { let mut command = format!( "powershell -NoProfile -ExecutionPolicy Bypass -File {}", windows_command_quote(&path) ); if let Some(action) = action { command.push(' '); command.push_str(action); } command } #[cfg(not(windows))] { let mut command = format!("bash {}", shell_single_quote(&path)); if let Some(action) = action { command.push(' '); command.push_str(action); } command } } pub(crate) fn legacy_bash_hook_command(hook_path: &Path, action: Option<&str>) -> String { let mut command = format!( "bash {}", shell_single_quote(&hook_path.display().to_string()) ); if let Some(action) = action { command.push(' '); command.push_str(action); } command } #[cfg(windows)] fn windows_command_quote(value: &str) -> String { format!("\"{}\"", value.replace('"', "\\\"")) }