diff options
author | Joey Hess <joeyh@joeyh.name> | 2015-01-06 15:31:24 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2015-01-06 16:19:41 -0400 |
commit | c9f1281cdd937e9facd26741b3e42d60a9c5cf28 (patch) | |
tree | d93784c4a23a160d98fbfc40e69818c38ac06525 /Locations.hs | |
parent | 57c62d73082b6293a243f026003c697eda02b401 (diff) |
Switch to using relative paths to the git repository.
This allows the git repository to be moved while git-annex is running in
it, with fewer problems.
On Windows, this avoids some of the problems with the absurdly small
MAX_PATH of 260 bytes. In particular, git-annex repositories should
work in deeper/longer directory structures than before. See
http://git-annex.branchable.com/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/
There are several possible ways this change could break git-annex:
1. If it changes its working directory while it's running, that would
be Bad News. Good news everyone! git-annex never does so. It would also
break thread safety, so all such things were stomped out long ago.
2. parentDir "." -> "" which is not a valid path. I had to fix one
instace of this, and I should probably wipe all calls to parentDir out
of the git-annex code base; it was never a good idea.
3. Things like relPathDirToFile require absolute input paths,
and code assumes that the git repo path is absolute and passes it to it
as-is. In the case of relPathDirToFile, I converted it to not make
this assumption.
Currently, the test suite has 16 failures.
Diffstat (limited to 'Locations.hs')
-rw-r--r-- | Locations.hs | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/Locations.hs b/Locations.hs index bcf793bda..614cbdde3 100644 --- a/Locations.hs +++ b/Locations.hs @@ -87,8 +87,8 @@ import qualified Git - Everything else should not end in a trailing path sepatator. - - Only functions (with names starting with "git") that build a path - - based on a git repository should return an absolute path. - - Everything else should use relative paths. + - based on a git repository should return full path relative to the git + - repository. Everything else returns path segments. -} {- The directory git annex uses for local state, relative to the .git @@ -108,7 +108,7 @@ annexLocations key = map (annexLocation key) annexHashes annexLocation :: Key -> Hasher -> FilePath annexLocation key hasher = objectDir </> keyPath key hasher -{- Annexed object's absolute location in a repository. +{- Annexed object's location in a repository. - - When there are multiple possible locations, returns the one where the - file is actually present. @@ -146,7 +146,7 @@ gitAnnexLink file key r = do currdir <- getCurrentDirectory let absfile = fromMaybe whoops $ absNormPathUnix currdir file loc <- gitAnnexLocation' key r False - return $ relPathDirToFile (parentDir absfile) loc + relPathDirToFile (parentDir absfile) loc where whoops = error $ "unable to normalize " ++ file |