diff options
-rw-r--r-- | Annex/GitOverlay.hs | 2 | ||||
-rw-r--r-- | Git/Index.hs | 23 |
2 files changed, 15 insertions, 10 deletions
diff --git a/Annex/GitOverlay.hs b/Annex/GitOverlay.hs index 2eae5e7fe..2193b7449 100644 --- a/Annex/GitOverlay.hs +++ b/Annex/GitOverlay.hs @@ -19,7 +19,7 @@ import qualified Annex {- Runs an action using a different git index file. -} withIndexFile :: FilePath -> Annex a -> Annex a withIndexFile f a = do - f' <- inRepo $ indexEnvVal f + f' <- liftIO $ indexEnvVal f withAltRepo (\g -> addGitEnv g indexEnv f') (\g g' -> g' { gitEnv = gitEnv g }) diff --git a/Git/Index.hs b/Git/Index.hs index 8c1049e7c..85ea480b5 100644 --- a/Git/Index.hs +++ b/Git/Index.hs @@ -9,19 +9,24 @@ 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 +{- Gets value to set GIT_INDEX_FILE to. Input should be absolute path, + - or relative to the CWD. + - + - 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 + - not to the CWD. Worse, other environment variables (GIT_WORK_TREE) + - or git options (--work-tree) or configuration (core.worktree) + - can change what the relative path is interpreted relative to. + - + - So, an absolute path is the only safe option for this to return. + -} +indexEnvVal :: FilePath -> IO String +indexEnvVal = absPath {- Forces git to use the specified index file. - @@ -31,9 +36,9 @@ indexEnvVal index r - Warning: Not thread safe. -} override :: FilePath -> Repo -> IO (IO ()) -override index r = do +override index _r = do res <- getEnv var - val <- indexEnvVal index r + val <- indexEnvVal index setEnv var val True return $ reset res where |