try to avoid Windows MAX_PATH limit, by using \\?\ prefix on git repo path
This commit is contained in:
parent
ae14354686
commit
c15fc92c16
2 changed files with 25 additions and 1 deletions
2
Annex.hs
2
Annex.hs
|
@ -187,7 +187,7 @@ newState c r = AnnexState
|
||||||
- Ensures the config is read, if it was not already. -}
|
- Ensures the config is read, if it was not already. -}
|
||||||
new :: Git.Repo -> IO AnnexState
|
new :: Git.Repo -> IO AnnexState
|
||||||
new r = do
|
new r = do
|
||||||
r' <- Git.Config.read r
|
r' <- Git.adjustPath <$> Git.Config.read r
|
||||||
let c = extractGitConfig r'
|
let c = extractGitConfig r'
|
||||||
newState c <$> if annexDirect c then fixupDirect r' else return r'
|
newState c <$> if annexDirect c then fixupDirect r' else return r'
|
||||||
|
|
||||||
|
|
24
Git.hs
24
Git.hs
|
@ -30,6 +30,7 @@ module Git (
|
||||||
attributes,
|
attributes,
|
||||||
hookPath,
|
hookPath,
|
||||||
assertLocal,
|
assertLocal,
|
||||||
|
adjustPath,
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Network.URI (uriPath, uriScheme, unEscapeString)
|
import Network.URI (uriPath, uriScheme, unEscapeString)
|
||||||
|
@ -139,3 +140,26 @@ hookPath script repo = do
|
||||||
#else
|
#else
|
||||||
isexecutable f = isExecutable . fileMode <$> getFileStatus f
|
isexecutable f = isExecutable . fileMode <$> getFileStatus f
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
{- Adusts the path to a local Repo.
|
||||||
|
-
|
||||||
|
- On windows, prefixing a path with \\?\ makes it be processed as a raw
|
||||||
|
- path (/ is not converted to \). The benefit is that such a path does
|
||||||
|
- avoids Windows's 260 byte limitation on the entire path. -}
|
||||||
|
adjustPath :: Repo -> Repo
|
||||||
|
adjustPath r@(Repo { location = l@(Local { gitdir = d, worktree = w }) }) = r
|
||||||
|
{ location = l
|
||||||
|
{ gitdir = adjustPath' d
|
||||||
|
, worktree = fmap adjustPath' w
|
||||||
|
}
|
||||||
|
}
|
||||||
|
adjustPath r@(Repo { location = LocalUnknown d }) =
|
||||||
|
r { location = LocalUnknown (adjustPath' d) }
|
||||||
|
adjustPath r = r
|
||||||
|
|
||||||
|
adjustPath' :: FilePath -> FilePath
|
||||||
|
#if mingw32_HOST_OS
|
||||||
|
adjustPath' d = "\\\\?\\" ++ d
|
||||||
|
#else
|
||||||
|
adjustPath' = id
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue