work around msysgit very strange behavior on ./ or .\ at start of path

Seems that verify_path() rejects such a path on Windows, but I cannot see
why. Git bug?
This commit is contained in:
Joey Hess 2013-12-04 23:49:18 -04:00
parent c077cee44a
commit c717905d15

View file

@ -45,15 +45,24 @@ asTopFilePath :: FilePath -> TopFilePath
asTopFilePath file = TopFilePath file
{- Git may use a different representation of a path when storing
- it internally. For example, on Windows, git uses '/' to separate paths
- stored in the repository, despite Windows using '\' -}
- it internally.
-
- On Windows, git uses '/' to separate paths stored in the repository,
- despite Windows using '\'. Also, git on windows dislikes paths starting
- with "./" or ".\".
-
-}
type InternalGitPath = String
toInternalGitPath :: FilePath -> InternalGitPath
#ifndef mingw32_HOST_OS
toInternalGitPath = id
#else
toInternalGitPath = replace "\\" "/"
toInternalGitPath p =
let p' = replace "\\" "/" p
in if "./" `isPrefixOf` p'
then dropWhile (== '/') (drop 1 p')
else p'
#endif
fromInternalGitPath :: InternalGitPath -> FilePath