From 4b5ba8f6f57fd3986d598d5bc3917a2fe36e637f Mon Sep 17 00:00:00 2001 From: Casey Rodarmor Date: Thu, 13 Jun 2024 13:21:00 -0700 Subject: [PATCH] Load environment file from dotenv-path relative to working directory (#2152) --- src/load_dotenv.rs | 3 ++- tests/dotenv.rs | 19 +++++++++++++++++++ tests/test.rs | 5 +++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/load_dotenv.rs b/src/load_dotenv.rs index c867e97..29b31b2 100644 --- a/src/load_dotenv.rs +++ b/src/load_dotenv.rs @@ -24,8 +24,9 @@ pub(crate) fn load_dotenv( } if let Some(path) = dotenv_path { + let path = working_directory.join(path); if path.is_file() { - return load_from_file(&working_directory.join(path)); + return load_from_file(&path); } } diff --git a/tests/dotenv.rs b/tests/dotenv.rs index 8e50467..3c8df84 100644 --- a/tests/dotenv.rs +++ b/tests/dotenv.rs @@ -360,6 +360,7 @@ fn no_dotenv() { .stderr("echo DEFAULT\n") .run(); } + #[test] fn dotenv_env_var_override() { Test::new() @@ -375,3 +376,21 @@ fn dotenv_env_var_override() { .stderr("echo $DOTENV_KEY\n") .run(); } + +#[test] +fn dotenv_path_usable_from_subdir() { + Test::new() + .justfile( + " + set dotenv-path := '.custom-env' + + @echo: + echo $DOTENV_KEY + ", + ) + .create_dir("sub") + .current_dir("sub") + .write(".custom-env", "DOTENV_KEY=dotenv-value") + .stdout("dotenv-value\n") + .run(); +} diff --git a/tests/test.rs b/tests/test.rs index e241d7e..2935035 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -94,6 +94,11 @@ impl Test { self } + pub(crate) fn create_dir(self, path: impl AsRef) -> Self { + fs::create_dir_all(self.tempdir.path().join(path.as_ref())).unwrap(); + self + } + pub(crate) fn current_dir(mut self, path: impl AsRef) -> Self { path.as_ref().clone_into(&mut self.current_dir); self