diff --git a/Cargo.lock b/Cargo.lock index 5495ca49d..1789fea30 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -248,27 +248,6 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - [[package]] name = "errno" version = "0.2.8" @@ -301,6 +280,17 @@ dependencies = [ "libc", ] +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + [[package]] name = "faccess" version = "0.2.4" @@ -334,7 +324,7 @@ dependencies = [ "crossbeam-channel", "ctrlc", "diff", - "dirs-next", + "etcetera", "faccess", "filetime", "globset", @@ -374,17 +364,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "getrandom" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - [[package]] name = "globset" version = "0.4.10" @@ -428,6 +407,15 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +[[package]] +name = "home" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "747309b4b440c06d57b0b25f2aee03ee9b5e5397d288c60e21fc709bb98a7408" +dependencies = [ + "winapi", +] + [[package]] name = "humantime" version = "2.1.0" @@ -751,17 +739,6 @@ dependencies = [ "bitflags 1.3.2", ] -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom", - "redox_syscall 0.2.16", - "thiserror", -] - [[package]] name = "regex" version = "1.7.3" @@ -929,26 +906,6 @@ dependencies = [ "test-case-core", ] -[[package]] -name = "thiserror" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.2", -] - [[package]] name = "thread_local" version = "1.1.7" @@ -997,12 +954,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - [[package]] name = "wasm-bindgen" version = "0.2.84" diff --git a/Cargo.toml b/Cargo.toml index 945decccf..828e9acea 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,7 +45,7 @@ ctrlc = "3.2" humantime = "2.1" globset = "0.4" anyhow = "1.0" -dirs-next = "2.0" +etcetera = "0.8" normpath = "1.1.1" once_cell = "1.17.1" crossbeam-channel = "0.5.6" diff --git a/src/walk.rs b/src/walk.rs index 0e66b9ab5..9b9213825 100644 --- a/src/walk.rs +++ b/src/walk.rs @@ -10,6 +10,7 @@ use std::{borrow::Cow, io::Write}; use anyhow::{anyhow, Result}; use crossbeam_channel::{bounded, Receiver, RecvTimeoutError, Sender}; +use etcetera::BaseStrategy; use ignore::overrides::OverrideBuilder; use ignore::{self, WalkBuilder}; use regex::bytes::Regex; @@ -89,26 +90,17 @@ pub fn scan(paths: &[PathBuf], patterns: Arc>, config: Arc) - } if config.read_global_ignore { - #[cfg(target_os = "macos")] - let config_dir_op = std::env::var_os("XDG_CONFIG_HOME") - .map(PathBuf::from) - .filter(|p| p.is_absolute()) - .or_else(|| dirs_next::home_dir().map(|d| d.join(".config"))); - - #[cfg(not(target_os = "macos"))] - let config_dir_op = dirs_next::config_dir(); - - if let Some(global_ignore_file) = config_dir_op - .map(|p| p.join("fd").join("ignore")) - .filter(|p| p.is_file()) - { - let result = walker.add_ignore(global_ignore_file); - match result { - Some(ignore::Error::Partial(_)) => (), - Some(err) => { - print_error(format!("Malformed pattern in global ignore file. {}.", err)); + if let Ok(basedirs) = etcetera::choose_base_strategy() { + let global_ignore_file = basedirs.config_dir().join("fd").join("ignore"); + if global_ignore_file.is_file() { + let result = walker.add_ignore(global_ignore_file); + match result { + Some(ignore::Error::Partial(_)) => (), + Some(err) => { + print_error(format!("Malformed pattern in global ignore file. {}.", err)); + } + None => (), } - None => (), } } }