From bc2974c2146a4f68800a1dd4bf7257977932a403 Mon Sep 17 00:00:00 2001 From: Ulysses Souza Date: Wed, 13 Jul 2022 00:27:51 +0200 Subject: [PATCH] Ignore variable names starting with numbers Signed-off-by: Ulysses Souza --- dotenv/fixtures/plain.env | 1 + dotenv/godotenv.go | 16 ++++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/dotenv/fixtures/plain.env b/dotenv/fixtures/plain.env index 430914df..0fa4c343 100644 --- a/dotenv/fixtures/plain.env +++ b/dotenv/fixtures/plain.env @@ -3,6 +3,7 @@ OPTION_B=2 OPTION_C= 3 OPTION_D =4 OPTION_E = 5 +456 = ABC OPTION_F = OPTION_G= OPTION_H = my string # Inline comment diff --git a/dotenv/godotenv.go b/dotenv/godotenv.go index e994235d..50886f22 100644 --- a/dotenv/godotenv.go +++ b/dotenv/godotenv.go @@ -93,26 +93,30 @@ func load(overload bool, filenames ...string) (err error) { return } +var startsWithDigitRegex = regexp.MustCompile(`^\s*\d.*`) // Keys starting with numbers are ignored + // ReadWithLookup gets all env vars from the files and/or lookup function and return values as // a map rather than automatically writing values into env -func ReadWithLookup(lookupFn LookupFn, filenames ...string) (envMap map[string]string, err error) { +func ReadWithLookup(lookupFn LookupFn, filenames ...string) (map[string]string, error) { filenames = filenamesOrDefault(filenames) - envMap = make(map[string]string) + envMap := make(map[string]string) for _, filename := range filenames { individualEnvMap, individualErr := readFile(filename, lookupFn) if individualErr != nil { - err = individualErr - return // return early on a spazout + return envMap, individualErr } for key, value := range individualEnvMap { + if startsWithDigitRegex.MatchString(key) { + continue + } envMap[key] = value } } - return + return envMap, nil } // Read all env (with same file loading semantics as Load) but return values as @@ -183,7 +187,7 @@ func Marshal(envMap map[string]string) (string, error) { if d, err := strconv.Atoi(v); err == nil { lines = append(lines, fmt.Sprintf(`%s=%d`, k, d)) } else { - lines = append(lines, fmt.Sprintf(`%s="%s"`, k, doubleQuoteEscape(v))) //nolint // Cannot use %q here + lines = append(lines, fmt.Sprintf(`%s="%s"`, k, doubleQuoteEscape(v))) // nolint // Cannot use %q here } } sort.Strings(lines)