aboutsummaryrefslogtreecommitdiff
path: root/Git
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2016-05-17 14:40:53 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2016-05-17 14:42:06 -0400
commit49ac40c1e90a2a32a2728e36f02a0f3baa854c8b (patch)
treed094e3d761dd06b065c94f9265bc99afcce23dcc /Git
parent323e3665c2526c6560f71efb013543dd068eb612 (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.hs18
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"