From cd1272609dc1d72afbb2dcf0978be5e31bf44aaf Mon Sep 17 00:00:00 2001 From: "John Barton (joho)" Date: Tue, 28 Mar 2017 11:39:40 +1100 Subject: [PATCH 1/2] Add failing test for override of empty var --- godotenv_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/godotenv_test.go b/godotenv_test.go index 0a1aff6..a62bf87 100644 --- a/godotenv_test.go +++ b/godotenv_test.go @@ -100,10 +100,12 @@ func TestLoadDoesNotOverride(t *testing.T) { // ensure NO overload presets := map[string]string{ "OPTION_A": "do_not_override", + "OPTION_B": "", } expectedValues := map[string]string{ "OPTION_A": "do_not_override", + "OPTION_B": "", } loadEnvAndCompareValues(t, Load, envFileName, expectedValues, presets) } From 034acc219052fab168a0b5c5c6537b3c9260e47c Mon Sep 17 00:00:00 2001 From: "John Barton (joho)" Date: Tue, 28 Mar 2017 11:54:56 +1100 Subject: [PATCH 2/2] Change check of existing env to respect empty (but set) vars. --- godotenv.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/godotenv.go b/godotenv.go index 016acc1..0d9066c 100644 --- a/godotenv.go +++ b/godotenv.go @@ -119,8 +119,15 @@ func loadFile(filename string, overload bool) error { return err } + currentEnv := map[string]bool{} + rawEnv := os.Environ() + for _, rawEnvLine := range rawEnv { + key := strings.Split(rawEnvLine, "=")[0] + currentEnv[key] = true + } + for key, value := range envMap { - if os.Getenv(key) == "" || overload { + if !currentEnv[key] || overload { os.Setenv(key, value) } }