From 444a4dad77289265296d1fa76e060c46497ec6c8 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 10 Dec 2013 15:46:51 -0400 Subject: merge from git-annex --- Git/FilePath.hs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'Git/FilePath.hs') diff --git a/Git/FilePath.hs b/Git/FilePath.hs index 37d740f..4189244 100644 --- a/Git/FilePath.hs +++ b/Git/FilePath.hs @@ -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 -- cgit v1.2.3