From a239a30ed41c30cb49903d817cb4e52b0f499900 Mon Sep 17 00:00:00 2001 From: patrick brisbin Date: Wed, 12 Jun 2019 10:15:38 -0400 Subject: [PATCH 1/2] Only set unset variables --- src/LoadEnv.hs | 12 +++++++++--- test/LoadEnvSpec.hs | 9 +++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/LoadEnv.hs b/src/LoadEnv.hs index 25e2bdb..19254e8 100644 --- a/src/LoadEnv.hs +++ b/src/LoadEnv.hs @@ -23,14 +23,15 @@ module LoadEnv , loadEnvFromAbsolute ) where -import Control.Monad ((<=<)) +import Control.Monad (unless, (<=<)) import Data.Bool (bool) import Data.Foldable (for_, traverse_) import Data.List (inits) +import Data.Maybe (isJust) import LoadEnv.Parse import System.Directory (doesFileExist, findFile, getCurrentDirectory, makeAbsolute) -import System.Environment (setEnv) +import System.Environment (lookupEnv, setEnv) import System.FilePath (isRelative, joinPath, splitDirectories) import Text.Parsec.String (parseFromFile) @@ -63,7 +64,12 @@ loadEnvFrom name = do for_ mFile $ \file -> do result <- parseFromFile parseEnvironment file - either print (traverse_ $ uncurry setEnv) result + either print (traverse_ $ uncurry defaultEnv) result + +defaultEnv :: String -> String -> IO () +defaultEnv k v = do + exists <- isJust <$> lookupEnv k + unless exists $ setEnv k v -- | @'loadEnvFrom'@, but don't traverse up the directory tree loadEnvFromAbsolute :: FilePath -> IO () diff --git a/test/LoadEnvSpec.hs b/test/LoadEnvSpec.hs index 5c12ee0..cc6bdf1 100644 --- a/test/LoadEnvSpec.hs +++ b/test/LoadEnvSpec.hs @@ -25,6 +25,15 @@ spec = after_ cleanup $ do mbar `shouldBe` Just "bar" mbat `shouldBe` Just "bat" + it "does not override pre-existing variables" $ do + writeFile envFile $ unlines ["FOO=bar"] + setEnv "FOO" "baz" + + loadEnvFrom envFile + + mbar <- lookupEnv "FOO" + mbar `shouldBe` Just "baz" + it "does not fail if the file is not present" $ do loadEnvFrom "i-do-not-exist" From 179ce2d51e8f5227b90cc985be4c98b995a0f203 Mon Sep 17 00:00:00 2001 From: patrick brisbin Date: Wed, 12 Jun 2019 10:27:57 -0400 Subject: [PATCH 2/2] Version bump --- CHANGELOG.md | 25 ++++++++++++++++++++++++- package.yaml | 2 +- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7d408f..f63dcb6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,30 @@ -## [*Unreleased*](https://github.com/pbrisbin/load-env/compare/v0.2.0.2...master) +## [*Unreleased*](https://github.com/pbrisbin/load-env/compare/v0.2.1.0...master) None +## [v0.2.1.0](https://github.com/pbrisbin/load-env/compare/v0.2.0.2...v0.2.1.0) + +- Don't override values already set in the environment + + Given a hypothetical program `load-env`, which uses one of our `loadEnv` + functions on `stdin`: + + Previously, + + ``` + FOO=bar load-env < Parse a .env file and load any declared variables into the current process's