From ad1e45aaedee71fbae100d2d73ff56b6d09e1577 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 14 Nov 2017 14:25:46 -0400 Subject: split out setEnv to avoid adding dep MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Windows needs the setenv package in custom-setup, but I don't want to pull it in on unix, which would probably break some builds and need more work. Instead, split out setEnv to a separate module. Quite likely, unix-compat will get a portable environment layer, and then both modules can be removed from here. This commit was sponsored by Øyvind Andersen Holm. --- Annex/Environment.hs | 1 + Assistant/Upgrade.hs | 1 + Git/CurrentRepo.hs | 1 + Git/Index.hs | 1 + Test.hs | 11 ++++++----- Utility/Env.hs | 24 ------------------------ Utility/Env/Set.hs | 40 ++++++++++++++++++++++++++++++++++++++++ Utility/Gpg.hs | 1 + Utility/Lsof.hs | 2 +- git-annex.cabal | 1 + 10 files changed, 53 insertions(+), 30 deletions(-) create mode 100644 Utility/Env/Set.hs diff --git a/Annex/Environment.hs b/Annex/Environment.hs index 4f0fda986..0ddf9d2b7 100644 --- a/Annex/Environment.hs +++ b/Annex/Environment.hs @@ -14,6 +14,7 @@ import Utility.UserInfo import qualified Git.Config import Config import Utility.Env +import Utility.Env.Set {- Checks that the system's environment allows git to function. - Git requires a GECOS username, or suitable git configuration, or diff --git a/Assistant/Upgrade.hs b/Assistant/Upgrade.hs index cd1be4d4e..d7491c30f 100644 --- a/Assistant/Upgrade.hs +++ b/Assistant/Upgrade.hs @@ -15,6 +15,7 @@ import qualified Annex import Assistant.Alert import Assistant.DaemonStatus import Utility.Env +import Utility.Env.Set import Types.Distribution import Types.Transfer import Logs.Web diff --git a/Git/CurrentRepo.hs b/Git/CurrentRepo.hs index 69a679ee3..df074cf8b 100644 --- a/Git/CurrentRepo.hs +++ b/Git/CurrentRepo.hs @@ -12,6 +12,7 @@ import Git.Types import Git.Construct import qualified Git.Config import Utility.Env +import Utility.Env.Set {- Gets the current git repository. - diff --git a/Git/Index.hs b/Git/Index.hs index 85ea480b5..0898569b4 100644 --- a/Git/Index.hs +++ b/Git/Index.hs @@ -10,6 +10,7 @@ module Git.Index where import Common import Git import Utility.Env +import Utility.Env.Set indexEnv :: String indexEnv = "GIT_INDEX_FILE" diff --git a/Test.hs b/Test.hs index 424c3aacc..be814bbb3 100644 --- a/Test.hs +++ b/Test.hs @@ -95,6 +95,7 @@ import qualified Utility.Process import qualified Utility.Misc import qualified Utility.InodeCache import qualified Utility.Env +import qualified Utility.Env.Set import qualified Utility.Matcher import qualified Utility.Exception import qualified Utility.Hash @@ -142,7 +143,7 @@ runner = Just go subenv = "GIT_ANNEX_TEST_SUBPROCESS" runsubprocesstests opts Nothing = do pp <- Annex.Path.programPath - Utility.Env.setEnv subenv "1" True + Utility.Env.Set.setEnv subenv "1" True ps <- getArgs (Nothing, Nothing, Nothing, pid) <-createProcess (proc pp ps) exitcode <- waitForProcess pid @@ -1931,9 +1932,9 @@ ensuretmpdir = do isolateGitConfig :: IO a -> IO a isolateGitConfig a = Utility.Tmp.withTmpDir "testhome" $ \tmphome -> do tmphomeabs <- absPath tmphome - Utility.Env.setEnv "HOME" tmphomeabs True - Utility.Env.setEnv "XDG_CONFIG_HOME" tmphomeabs True - Utility.Env.setEnv "GIT_CONFIG_NOSYSTEM" "1" True + Utility.Env.Set.setEnv "HOME" tmphomeabs True + Utility.Env.Set.setEnv "XDG_CONFIG_HOME" tmphomeabs True + Utility.Env.Set.setEnv "GIT_CONFIG_NOSYSTEM" "1" True a cleanup :: FilePath -> IO () @@ -2119,7 +2120,7 @@ setTestMode testmode = do currdir <- getCurrentDirectory p <- Utility.Env.getEnvDefault "PATH" "" - mapM_ (\(var, val) -> Utility.Env.setEnv var val True) + mapM_ (\(var, val) -> Utility.Env.Set.setEnv var val True) -- Ensure that the just-built git annex is used. [ ("PATH", currdir ++ [searchPathSeparator] ++ p) , ("TOPDIR", currdir) diff --git a/Utility/Env.hs b/Utility/Env.hs index c56f4ec23..dfebd9868 100644 --- a/Utility/Env.hs +++ b/Utility/Env.hs @@ -16,7 +16,6 @@ import Control.Applicative import Data.Maybe import Prelude import qualified System.Environment as E -import qualified System.SetEnv #else import qualified System.Posix.Env as PE #endif @@ -42,29 +41,6 @@ getEnvironment = PE.getEnvironment getEnvironment = E.getEnvironment #endif -{- Sets an environment variable. To overwrite an existing variable, - - overwrite must be True. - - - - On Windows, setting a variable to "" unsets it. -} -setEnv :: String -> String -> Bool -> IO () -#ifndef mingw32_HOST_OS -setEnv var val overwrite = PE.setEnv var val overwrite -#else -setEnv var val True = System.SetEnv.setEnv var val -setEnv var val False = do - r <- getEnv var - case r of - Nothing -> setEnv var val True - Just _ -> return () -#endif - -unsetEnv :: String -> IO () -#ifndef mingw32_HOST_OS -unsetEnv = PE.unsetEnv -#else -unsetEnv = System.SetEnv.unsetEnv -#endif - {- Adds the environment variable to the input environment. If already - present in the list, removes the old value. - diff --git a/Utility/Env/Set.hs b/Utility/Env/Set.hs new file mode 100644 index 000000000..fd8d5140d --- /dev/null +++ b/Utility/Env/Set.hs @@ -0,0 +1,40 @@ +{- portable environment variables + - + - Copyright 2013 Joey Hess + - + - License: BSD-2-clause + -} + +{-# LANGUAGE CPP #-} + +module Utility.Env.Set where + +#ifdef mingw32_HOST_OS +import qualified System.Environment as E +import qualified System.SetEnv +#else +import qualified System.Posix.Env as PE +#endif + +{- Sets an environment variable. To overwrite an existing variable, + - overwrite must be True. + - + - On Windows, setting a variable to "" unsets it. -} +setEnv :: String -> String -> Bool -> IO () +#ifndef mingw32_HOST_OS +setEnv var val overwrite = PE.setEnv var val overwrite +#else +setEnv var val True = System.SetEnv.setEnv var val +setEnv var val False = do + r <- getEnv var + case r of + Nothing -> setEnv var val True + Just _ -> return () +#endif + +unsetEnv :: String -> IO () +#ifndef mingw32_HOST_OS +unsetEnv = PE.unsetEnv +#else +unsetEnv = System.SetEnv.unsetEnv +#endif diff --git a/Utility/Gpg.hs b/Utility/Gpg.hs index 94d588cd7..cbe1e4f82 100644 --- a/Utility/Gpg.hs +++ b/Utility/Gpg.hs @@ -15,6 +15,7 @@ import qualified Build.SysConfig as SysConfig import System.Posix.Types import qualified System.Posix.IO import Utility.Env +import Utility.Env.Set #endif import Utility.Tmp import Utility.Format (decode_c) diff --git a/Utility/Lsof.hs b/Utility/Lsof.hs index e3ed709ec..d8f0deb32 100644 --- a/Utility/Lsof.hs +++ b/Utility/Lsof.hs @@ -11,7 +11,7 @@ module Utility.Lsof where import Common import Build.SysConfig as SysConfig -import Utility.Env +import Utility.Env.Set import System.Posix.Types diff --git a/git-annex.cabal b/git-annex.cabal index 7cf23f9b6..b314d95ee 100644 --- a/git-annex.cabal +++ b/git-annex.cabal @@ -995,6 +995,7 @@ Executable git-annex Utility.Dot Utility.DottedVersion Utility.Env + Utility.Env.Set Utility.Exception Utility.ExternalSHA Utility.FileMode -- cgit v1.2.3