refac: use Lazy cell to optimize env::current_dir call

This commit is contained in:
João M. Bezerra 2022-06-08 17:50:25 -03:00
parent b2c87c5307
commit 86234084ab
2 changed files with 10 additions and 7 deletions

View File

@ -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<PathBuf> = Lazy::new(|| env::current_dir().unwrap_or_default());
/// The status code returned from `ouch` on error
pub const EXIT_FAILURE: i32 = libc::EXIT_FAILURE;

View File

@ -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<str> {
/// 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 &current_dir {
Ok(inner) => inner.as_path(),
Err(_) => Path::new(""),
};
let current_dir = &*CURRENT_DIRECTORY;
source_path.strip_prefix(current_dir).unwrap_or(source_path)
}