Mercurial > public > mercurial-scm > hg-stable
diff rust/hg-core/src/utils.rs @ 46640:755c31a1caf9
rhg: Add support for the blackbox extension
Only `command` and `commandfinish` events are logged.
The `dirty`, `logsource`, `track` and `ignore` configuration items
are not supported yet.
To indicate commands executed without Python, a `(rust) ` prefix is added
in corresponding log messages.
Differential Revision: https://phab.mercurial-scm.org/D10012
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Tue, 16 Feb 2021 13:08:37 +0100 |
parents | 435d9fc72646 |
children | a069639783a0 |
line wrap: on
line diff
--- a/rust/hg-core/src/utils.rs Wed Feb 17 13:00:25 2021 +0100 +++ b/rust/hg-core/src/utils.rs Tue Feb 16 13:08:37 2021 +0100 @@ -188,6 +188,35 @@ } } +#[cfg(unix)] +pub fn shell_quote(value: &[u8]) -> Vec<u8> { + // TODO: Use the `matches!` macro when we require Rust 1.42+ + if value.iter().all(|&byte| match byte { + b'a'..=b'z' + | b'A'..=b'Z' + | b'0'..=b'9' + | b'.' + | b'_' + | b'/' + | b'+' + | b'-' => true, + _ => false, + }) { + value.to_owned() + } else { + let mut quoted = Vec::with_capacity(value.len() + 2); + quoted.push(b'\''); + for &byte in value { + if byte == b'\'' { + quoted.push(b'\\'); + } + quoted.push(byte); + } + quoted.push(b'\''); + quoted + } +} + pub fn current_dir() -> Result<std::path::PathBuf, HgError> { std::env::current_dir().map_err(|error| HgError::IoError { error,