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:
parent
e81b1bc9e7
commit
766728c8cf
4 changed files with 17 additions and 10 deletions
18
Git/Index.hs
18
Git/Index.hs
|
@ -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"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue