unify handling of unusual GIT_INDEX_FILE relative path

This is probably a git bug that stuck in its interface.
This commit is contained in:
Joey Hess 2016-05-17 14:40:53 -04:00
parent e81b1bc9e7
commit 766728c8cf
Failed to extract signature
4 changed files with 17 additions and 10 deletions

View file

@ -9,11 +9,20 @@ module Git.Index where
import Common
import Git
import Git.FilePath
import Utility.Env
indexEnv :: String
indexEnv = "GIT_INDEX_FILE"
{- When relative, GIT_INDEX_FILE is interpreted by git as being
- relative to the top of the work tree of the git repository,
- not to the CWD. -}
indexEnvVal :: FilePath -> Repo -> IO String
indexEnvVal index r
| isAbsolute index = return index
| otherwise = getTopFilePath <$> toTopFilePath index r
{- Forces git to use the specified index file.
-
- Returns an action that will reset back to the default
@ -21,12 +30,11 @@ indexEnv = "GIT_INDEX_FILE"
-
- Warning: Not thread safe.
-}
override :: FilePath -> IO (IO ())
override index = do
override :: FilePath -> Repo -> IO (IO ())
override index r = do
res <- getEnv var
-- Workaround http://thread.gmane.org/gmane.comp.version-control.git/294880
absindex <- absPath index
setEnv var absindex True
val <- indexEnvVal index r
setEnv var val True
return $ reset res
where
var = "GIT_INDEX_FILE"