more OsPath conversion
About 1/10th done with this I think.
This commit is contained in:
parent
8021d22955
commit
c412c59ecd
16 changed files with 152 additions and 142 deletions
33
Git.hs
33
Git.hs
|
@ -47,6 +47,7 @@ import qualified System.FilePath.ByteString as P
|
|||
|
||||
import Common
|
||||
import Git.Types
|
||||
import qualified Utility.OsString as OS
|
||||
#ifndef mingw32_HOST_OS
|
||||
import Utility.FileMode
|
||||
#endif
|
||||
|
@ -56,32 +57,32 @@ repoDescribe :: Repo -> String
|
|||
repoDescribe Repo { remoteName = Just name } = name
|
||||
repoDescribe Repo { location = Url url } = show url
|
||||
repoDescribe Repo { location = UnparseableUrl url } = url
|
||||
repoDescribe Repo { location = Local { worktree = Just dir } } = fromRawFilePath dir
|
||||
repoDescribe Repo { location = Local { gitdir = dir } } = fromRawFilePath dir
|
||||
repoDescribe Repo { location = LocalUnknown dir } = fromRawFilePath dir
|
||||
repoDescribe Repo { location = Local { worktree = Just dir } } = fromOsPath dir
|
||||
repoDescribe Repo { location = Local { gitdir = dir } } = fromOsPath dir
|
||||
repoDescribe Repo { location = LocalUnknown dir } = fromOsPath dir
|
||||
repoDescribe Repo { location = Unknown } = "UNKNOWN"
|
||||
|
||||
{- Location of the repo, either as a path or url. -}
|
||||
repoLocation :: Repo -> String
|
||||
repoLocation Repo { location = Url url } = show url
|
||||
repoLocation Repo { location = UnparseableUrl url } = url
|
||||
repoLocation Repo { location = Local { worktree = Just dir } } = fromRawFilePath dir
|
||||
repoLocation Repo { location = Local { gitdir = dir } } = fromRawFilePath dir
|
||||
repoLocation Repo { location = LocalUnknown dir } = fromRawFilePath dir
|
||||
repoLocation Repo { location = Local { worktree = Just dir } } = fromOsPath dir
|
||||
repoLocation Repo { location = Local { gitdir = dir } } = fromOsPath dir
|
||||
repoLocation Repo { location = LocalUnknown dir } = fromOsPath dir
|
||||
repoLocation Repo { location = Unknown } = giveup "unknown repoLocation"
|
||||
|
||||
{- Path to a repository. For non-bare, this is the worktree, for bare,
|
||||
- it's the gitdir, and for URL repositories, is the path on the remote
|
||||
- host. -}
|
||||
repoPath :: Repo -> RawFilePath
|
||||
repoPath Repo { location = Url u } = toRawFilePath $ unEscapeString $ uriPath u
|
||||
repoPath :: Repo -> OsPath
|
||||
repoPath Repo { location = Url u } = toOsPath $ unEscapeString $ uriPath u
|
||||
repoPath Repo { location = Local { worktree = Just d } } = d
|
||||
repoPath Repo { location = Local { gitdir = d } } = d
|
||||
repoPath Repo { location = LocalUnknown dir } = dir
|
||||
repoPath Repo { location = Unknown } = giveup "unknown repoPath"
|
||||
repoPath Repo { location = UnparseableUrl _u } = giveup "unknown repoPath"
|
||||
|
||||
repoWorkTree :: Repo -> Maybe RawFilePath
|
||||
repoWorkTree :: Repo -> Maybe OsPath
|
||||
repoWorkTree Repo { location = Local { worktree = Just d } } = Just d
|
||||
repoWorkTree _ = Nothing
|
||||
|
||||
|
@ -137,13 +138,13 @@ assertLocal repo action
|
|||
| otherwise = action
|
||||
|
||||
{- Path to a repository's gitattributes file. -}
|
||||
attributes :: Repo -> RawFilePath
|
||||
attributes :: Repo -> OsPath
|
||||
attributes repo
|
||||
| repoIsLocalBare repo = attributesLocal repo
|
||||
| otherwise = repoPath repo P.</> ".gitattributes"
|
||||
| otherwise = repoPath repo </> literalOsPath ".gitattributes"
|
||||
|
||||
attributesLocal :: Repo -> RawFilePath
|
||||
attributesLocal repo = localGitDir repo P.</> "info" P.</> "attributes"
|
||||
attributesLocal :: Repo -> OsPath
|
||||
attributesLocal repo = localGitDir repo </> literalOsPath "info" </> literalOsPath "attributes"
|
||||
|
||||
{- Path to a given hook script in a repository, only if the hook exists
|
||||
- and is executable. -}
|
||||
|
@ -166,10 +167,12 @@ relPath = adjustPath torel
|
|||
where
|
||||
torel p = do
|
||||
p' <- relPathCwdToFile p
|
||||
return $ if B.null p' then "." else p'
|
||||
return $ if OS.null p'
|
||||
then literalOsPath "."
|
||||
else p'
|
||||
|
||||
{- Adjusts the path to a local Repo using the provided function. -}
|
||||
adjustPath :: (RawFilePath -> IO RawFilePath) -> Repo -> IO Repo
|
||||
adjustPath :: (OsPath -> IO OsPath) -> Repo -> IO Repo
|
||||
adjustPath f r@(Repo { location = l@(Local { gitdir = d, worktree = w }) }) = do
|
||||
d' <- f d
|
||||
w' <- maybe (pure Nothing) (Just <$$> f) w
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue