diff options
author | Joey Hess <joeyh@joeyh.name> | 2016-05-17 14:40:53 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2016-05-17 14:42:06 -0400 |
commit | 49ac40c1e90a2a32a2728e36f02a0f3baa854c8b (patch) | |
tree | d094e3d761dd06b065c94f9265bc99afcce23dcc /Git | |
parent | 323e3665c2526c6560f71efb013543dd068eb612 (diff) |
unify handling of unusual GIT_INDEX_FILE relative path
This is probably a git bug that stuck in its interface.
Diffstat (limited to 'Git')
-rw-r--r-- | Git/Index.hs | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/Git/Index.hs b/Git/Index.hs index a8b1df396..8c1049e7c 100644 --- a/Git/Index.hs +++ b/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" |