# HG changeset patch # User Simon Sapin # Date 2021-02-17 10:21:34 # Node ID d2e61f00ee9dd3933ab6ec737ac927dd4085d7b2 # Parent 98a455a62699ace0b2c743a8d3e4fa74f1a2f28e rust: Introduce a get_bytes_from_os_str utility function It does the same as get_bytes_from_path but takes an `OsStr` instead of a `Path`. The implementation is the same so using either ends up correct but the function name suggests it’s not. Differential Revision: https://phab.mercurial-scm.org/D10007 diff --git a/rust/hg-core/src/config/config.rs b/rust/hg-core/src/config/config.rs --- a/rust/hg-core/src/config/config.rs +++ b/rust/hg-core/src/config/config.rs @@ -11,7 +11,7 @@ use super::layer; use crate::config::layer::{ ConfigError, ConfigLayer, ConfigParseError, ConfigValue, }; -use crate::utils::files::get_bytes_from_path; +use crate::utils::files::get_bytes_from_os_str; use format_bytes::{write_bytes, DisplayBytes}; use std::env; use std::path::{Path, PathBuf}; @@ -134,8 +134,7 @@ impl Config { layer.add( section.to_owned(), key.to_owned(), - // `value` is not a path but this works for any `OsStr`: - get_bytes_from_path(value), + get_bytes_from_os_str(value), None, ); self.layers.push(layer) diff --git a/rust/hg-core/src/utils/files.rs b/rust/hg-core/src/utils/files.rs --- a/rust/hg-core/src/utils/files.rs +++ b/rust/hg-core/src/utils/files.rs @@ -17,6 +17,7 @@ use crate::utils::{ use lazy_static::lazy_static; use same_file::is_same_file; use std::borrow::{Cow, ToOwned}; +use std::ffi::OsStr; use std::fs::Metadata; use std::iter::FusedIterator; use std::ops::Deref; @@ -40,8 +41,13 @@ pub fn get_path_from_bytes(bytes: &[u8]) // that's why Vec is returned. #[cfg(unix)] pub fn get_bytes_from_path(path: impl AsRef) -> Vec { + get_bytes_from_os_str(path.as_ref()) +} + +#[cfg(unix)] +pub fn get_bytes_from_os_str(str: impl AsRef) -> Vec { use std::os::unix::ffi::OsStrExt; - path.as_ref().as_os_str().as_bytes().to_vec() + str.as_ref().as_bytes().to_vec() } /// An iterator over repository path yielding itself and its ancestors. diff --git a/rust/rhg/src/main.rs b/rust/rhg/src/main.rs --- a/rust/rhg/src/main.rs +++ b/rust/rhg/src/main.rs @@ -70,8 +70,7 @@ fn main_with_result(ui: &ui::Ui) -> Resu }; let config_args = values_of_global_arg("config") - // `get_bytes_from_path` works for OsStr the same as for Path - .map(hg::utils::files::get_bytes_from_path); + .map(hg::utils::files::get_bytes_from_os_str); let non_repo_config = &hg::config::Config::load(config_args)?; let repo_path = value_of_global_arg("repository").map(Path::new);