summaryrefslogtreecommitdiff
path: root/Git/CurrentRepo.hs
diff options
context:
space:
mode:
authorJoey Hess <joeyh@joeyh.name>2021-01-11 21:52:32 -0400
committerJoey Hess <joeyh@joeyh.name>2021-01-11 21:52:32 -0400
commitad48349741384ed0e49fab9cf13ac7f90aba0dd1 (patch)
tree6b8c894ce1057d069f89e7209c266f00ea43ec66 /Git/CurrentRepo.hs
parentb3e72e94efbce652f25fb99d6c6ace8beb2a52d4 (diff)
downloadgit-repair-ad48349741384ed0e49fab9cf13ac7f90aba0dd1.tar.gz
Merge from git-annex.
Diffstat (limited to 'Git/CurrentRepo.hs')
-rw-r--r--Git/CurrentRepo.hs37
1 files changed, 22 insertions, 15 deletions
diff --git a/Git/CurrentRepo.hs b/Git/CurrentRepo.hs
index 054a81e..25bdc5c 100644
--- a/Git/CurrentRepo.hs
+++ b/Git/CurrentRepo.hs
@@ -1,10 +1,12 @@
{- The current git repository.
-
- - Copyright 2012 Joey Hess <id@joeyh.name>
+ - Copyright 2012-2020 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU AGPL version 3 or higher.
-}
+{-# LANGUAGE OverloadedStrings #-}
+
module Git.CurrentRepo where
import Common
@@ -13,6 +15,10 @@ import Git.Construct
import qualified Git.Config
import Utility.Env
import Utility.Env.Set
+import qualified Utility.RawFilePath as R
+
+import qualified Data.ByteString as B
+import qualified System.FilePath.ByteString as P
{- Gets the current git repository.
-
@@ -37,14 +43,14 @@ get = do
gd <- getpathenv "GIT_DIR"
r <- configure gd =<< fromCwd
prefix <- getpathenv "GIT_PREFIX"
- wt <- maybe (fromRawFilePath <$> worktree (location r)) Just
+ wt <- maybe (worktree (location r)) Just
<$> getpathenvprefix "GIT_WORK_TREE" prefix
case wt of
Nothing -> return r
Just d -> do
- curr <- getCurrentDirectory
+ curr <- R.getCurrentDirectory
unless (d `dirContains` curr) $
- setCurrentDirectory d
+ setCurrentDirectory (fromRawFilePath d)
return $ addworktree wt r
where
getpathenv s = do
@@ -52,34 +58,35 @@ get = do
case v of
Just d -> do
unsetEnv s
- return (Just d)
+ return (Just (toRawFilePath d))
Nothing -> return Nothing
- getpathenvprefix s (Just prefix) | not (null prefix) =
+ getpathenvprefix s (Just prefix) | not (B.null prefix) =
getpathenv s >>= \case
Nothing -> return Nothing
Just d
| d == "." -> return (Just d)
- | otherwise -> Just <$> absPath (prefix </> d)
+ | otherwise -> Just
+ <$> absPath (prefix P.</> d)
getpathenvprefix s _ = getpathenv s
configure Nothing (Just r) = Git.Config.read r
configure (Just d) _ = do
absd <- absPath d
- curr <- getCurrentDirectory
- r <- Git.Config.read $ newFrom $
- Local
- { gitdir = toRawFilePath absd
- , worktree = Just (toRawFilePath curr)
- }
+ curr <- R.getCurrentDirectory
+ loc <- adjustGitDirFile $ Local
+ { gitdir = absd
+ , worktree = Just curr
+ }
+ r <- Git.Config.read $ newFrom loc
return $ if Git.Config.isBare r
then r { location = (location r) { worktree = Nothing } }
else r
-
configure Nothing Nothing = giveup "Not in a git repository."
addworktree w r = changelocation r $ Local
{ gitdir = gitdir (location r)
- , worktree = fmap toRawFilePath w
+ , worktree = w
}
+
changelocation r l = r { location = l }