diff options
-rw-r--r-- | Annex/Index.hs | 29 | ||||
-rw-r--r-- | Annex/Ssh.hs | 2 | ||||
-rw-r--r-- | Git/Env.hs | 38 |
3 files changed, 41 insertions, 28 deletions
diff --git a/Annex/Index.hs b/Annex/Index.hs index ee27ce5f6..b3323ff3a 100644 --- a/Annex/Index.hs +++ b/Annex/Index.hs @@ -5,19 +5,14 @@ - Licensed under the GNU GPL version 3 or higher. -} -{-# LANGUAGE CPP #-} - -module Annex.Index ( - withIndexFile, - addGitEnv, -) where +module Annex.Index (withIndexFile) where import qualified Control.Exception as E import Annex.Common import Git.Types +import Git.Env import qualified Annex -import Utility.Env {- Runs an action using a different git index file. -} withIndexFile :: FilePath -> Annex a -> Annex a @@ -30,23 +25,3 @@ withIndexFile f a = do a Annex.changeState $ \s -> s { Annex.repo = (Annex.repo s) { gitEnv = gitEnv g} } either E.throw return r - -addGitEnv :: Repo -> String -> String -> IO Repo -addGitEnv g var val = do - e <- maybe copyenv return (gitEnv g) - let e' = addEntry var val e - return $ g { gitEnv = Just e' } - where - copyenv = do -#ifdef __ANDROID__ - {- This should not be necessary on Android, but there is some - - weird getEnvironment breakage. See - - https://github.com/neurocyte/ghc-android/issues/7 - - Use getEnv to get some key environment variables that - - git expects to have. -} - let keyenv = words "USER PATH GIT_EXEC_PATH HOSTNAME HOME" - let getEnvPair k = maybe Nothing (\v -> Just (k, v)) <$> getEnv k - liftIO $ catMaybes <$> forM keyenv getEnvPair -#else - liftIO getEnvironment -#endif diff --git a/Annex/Ssh.hs b/Annex/Ssh.hs index 5c6a9dcea..a97134c79 100644 --- a/Annex/Ssh.hs +++ b/Annex/Ssh.hs @@ -34,7 +34,7 @@ import Config import Annex.Path import Utility.Env import Types.CleanupActions -import Annex.Index (addGitEnv) +import Git.Env #ifndef mingw32_HOST_OS import Annex.Perms import Annex.LockPool diff --git a/Git/Env.hs b/Git/Env.hs new file mode 100644 index 000000000..35a4eb04d --- /dev/null +++ b/Git/Env.hs @@ -0,0 +1,38 @@ +{- Adjusting the environment while running git commands. + - + - Copyright 2014-2016 Joey Hess <id@joeyh.name> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Git.Env where + +import Git +import Utility.Env + +{- Adjusts the gitEnv of a Repo. Copies the system environment if the repo + - does not have any gitEnv yet. -} +adjustGitEnv :: Repo -> ([(String, String)] -> [(String, String)]) -> IO Repo +adjustGitEnv g adj = do + e <- maybe copyenv return (gitEnv g) + let e' = adj e + return $ g { gitEnv = Just e' } + where + copyenv = do +#ifdef __ANDROID__ + {- This should not be necessary on Android, but there is some + - weird getEnvironment breakage. See + - https://github.com/neurocyte/ghc-android/issues/7 + - Use getEnv to get some key environment variables that + - git expects to have. -} + let keyenv = words "USER PATH GIT_EXEC_PATH HOSTNAME HOME" + let getEnvPair k = maybe Nothing (\v -> Just (k, v)) <$> getEnv k + catMaybes <$> forM keyenv getEnvPair +#else + getEnvironment +#endif + +addGitEnv :: Repo -> String -> String -> IO Repo +addGitEnv g var val = adjustGitEnv g (addEntry var val) |