more OsPath conversion
Git.Types now uses it, as does TopFilePath, making for plenty of new compile errors needing fixing. Sponsored-by: Brock Spratlen
This commit is contained in:
parent
12660314f1
commit
ea775baccd
22 changed files with 159 additions and 163 deletions
|
@ -32,13 +32,11 @@ import Common
|
|||
import Git
|
||||
import Git.Quote
|
||||
|
||||
import qualified System.FilePath.ByteString as P
|
||||
import qualified System.FilePath.Posix.ByteString
|
||||
import GHC.Generics
|
||||
import Control.DeepSeq
|
||||
|
||||
{- A RawFilePath, relative to the top of the git repository. -}
|
||||
newtype TopFilePath = TopFilePath { getTopFilePath :: RawFilePath }
|
||||
{- A path relative to the top of the git repository. -}
|
||||
newtype TopFilePath = TopFilePath { getTopFilePath :: OsPath }
|
||||
deriving (Show, Eq, Ord, Generic)
|
||||
|
||||
instance NFData TopFilePath
|
||||
|
@ -53,16 +51,16 @@ descBranchFilePath (BranchFilePath b f) =
|
|||
UnquotedByteString (fromRef' b) <> ":" <> QuotedPath (getTopFilePath f)
|
||||
|
||||
{- Path to a TopFilePath, within the provided git repo. -}
|
||||
fromTopFilePath :: TopFilePath -> Git.Repo -> RawFilePath
|
||||
fromTopFilePath p repo = P.combine (repoPath repo) (getTopFilePath p)
|
||||
fromTopFilePath :: TopFilePath -> Git.Repo -> OsPath
|
||||
fromTopFilePath p repo = combine (repoPath repo) (getTopFilePath p)
|
||||
|
||||
{- The input FilePath can be absolute, or relative to the CWD. -}
|
||||
toTopFilePath :: RawFilePath -> Git.Repo -> IO TopFilePath
|
||||
toTopFilePath :: OsPath -> Git.Repo -> IO TopFilePath
|
||||
toTopFilePath file repo = TopFilePath <$> relPathDirToFile (repoPath repo) file
|
||||
|
||||
{- The input RawFilePath must already be relative to the top of the git
|
||||
- repository -}
|
||||
asTopFilePath :: RawFilePath -> TopFilePath
|
||||
asTopFilePath :: OsPath -> TopFilePath
|
||||
asTopFilePath file = TopFilePath file
|
||||
|
||||
{- Git may use a different representation of a path when storing
|
||||
|
@ -72,25 +70,24 @@ asTopFilePath file = TopFilePath file
|
|||
- despite Windows using '\'.
|
||||
-
|
||||
-}
|
||||
type InternalGitPath = RawFilePath
|
||||
type InternalGitPath = OsPath
|
||||
|
||||
toInternalGitPath :: RawFilePath -> InternalGitPath
|
||||
toInternalGitPath :: OsPath -> InternalGitPath
|
||||
#ifndef mingw32_HOST_OS
|
||||
toInternalGitPath = id
|
||||
#else
|
||||
toInternalGitPath = encodeBS . replace "\\" "/" . decodeBS
|
||||
toInternalGitPath = toOsPath . encodeBS . replace "\\" "/" . decodeBS . fromOsPath
|
||||
#endif
|
||||
|
||||
fromInternalGitPath :: InternalGitPath -> RawFilePath
|
||||
fromInternalGitPath :: InternalGitPath -> OsPath
|
||||
#ifndef mingw32_HOST_OS
|
||||
fromInternalGitPath = id
|
||||
#else
|
||||
fromInternalGitPath = encodeBS . replace "/" "\\" . decodeBS
|
||||
fromInternalGitPath = toOsPath . encodeBS . replace "/" "\\" . decodeBS . fromOsPath
|
||||
#endif
|
||||
|
||||
{- isAbsolute on Windows does not think "/foo" or "\foo" is absolute,
|
||||
- so try posix paths.
|
||||
-}
|
||||
absoluteGitPath :: RawFilePath -> Bool
|
||||
absoluteGitPath p = P.isAbsolute p ||
|
||||
System.FilePath.Posix.ByteString.isAbsolute (toInternalGitPath p)
|
||||
absoluteGitPath p = isAbsolute p || isAbsolute (toInternalGitPath p)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue