From aafb9ed22e547427de8ae85a14fc8610676b5876 Mon Sep 17 00:00:00 2001 From: Josh Bode Date: Sun, 31 Mar 2024 12:06:27 +1100 Subject: [PATCH] Move logic to set current directory before loading other config Fixes #1843 --- src/config/settings.rs | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/config/settings.rs b/src/config/settings.rs index e5cd46308..ccbd26883 100644 --- a/src/config/settings.rs +++ b/src/config/settings.rs @@ -197,21 +197,31 @@ impl Settings { if let Some(settings) = SETTINGS.read().unwrap().as_ref() { return Ok(settings.clone()); } + + // Initial pass to obtain cd option let mut sb = Self::builder() .preloaded(CLI_SETTINGS.lock().unwrap().clone().unwrap_or_default()) .env(); - for file in Self::all_settings_files() { - sb = sb.preloaded(file); - } - let mut settings = sb.preloaded(DEFAULT_SETTINGS.clone()).load()?; - if let Some(cd) = &settings.cd { + + let mut settings = sb.load()?; + if let Some(mut cd) = settings.cd { static ORIG_PATH: Lazy> = Lazy::new(env::current_dir); - let mut cd = PathBuf::from(cd); if cd.is_relative() { cd = ORIG_PATH.as_ref()?.join(cd); } env::set_current_dir(cd)?; } + + // Reload settings after current directory option processed + sb = Self::builder() + .preloaded(CLI_SETTINGS.lock().unwrap().clone().unwrap_or_default()) + .env(); + for file in Self::all_settings_files() { + sb = sb.preloaded(file); + } + sb = sb.preloaded(DEFAULT_SETTINGS.clone()); + + settings = sb.load()?; if settings.raw { settings.jobs = 1; }