From 86234084ab9db33af3f889c0bb5cdd57d6e5cd3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20M=2E=20Bezerra?= Date: Wed, 8 Jun 2022 17:50:25 -0300 Subject: [PATCH] refac: use Lazy cell to optimize env::current_dir call --- src/main.rs | 6 ++++++ src/utils/formatting.rs | 11 ++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main.rs b/src/main.rs index db876e9..cdc2a81 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,13 +14,19 @@ pub mod utils; /// CLI argparsing definitions, using `clap`. pub mod opts; +use std::{env, path::PathBuf}; + use error::{Error, Result}; +use once_cell::sync::Lazy; use opts::{Opts, Subcommand}; use utils::{QuestionAction, QuestionPolicy}; // Used in BufReader and BufWriter to perform less syscalls const BUFFER_CAPACITY: usize = 1024 * 32; +/// Current directory or empty directory +static CURRENT_DIRECTORY: Lazy = Lazy::new(|| env::current_dir().unwrap_or_default()); + /// The status code returned from `ouch` on error pub const EXIT_FAILURE: i32 = libc::EXIT_FAILURE; diff --git a/src/utils/formatting.rs b/src/utils/formatting.rs index e250791..e49a54c 100644 --- a/src/utils/formatting.rs +++ b/src/utils/formatting.rs @@ -1,4 +1,6 @@ -use std::{borrow::Cow, cmp, env, path::Path}; +use std::{borrow::Cow, cmp, path::Path}; + +use crate::CURRENT_DIRECTORY; /// Converts an OsStr to utf8 with custom formatting. /// @@ -17,12 +19,7 @@ pub fn to_utf(os_str: &Path) -> Cow { /// Removes the current dir from the beginning of a path as it's redundant information, /// useful for presentation sake. pub fn strip_cur_dir(source_path: &Path) -> &Path { - let current_dir = env::current_dir(); - - let current_dir = match ¤t_dir { - Ok(inner) => inner.as_path(), - Err(_) => Path::new(""), - }; + let current_dir = &*CURRENT_DIRECTORY; source_path.strip_prefix(current_dir).unwrap_or(source_path) }