diff options
author | 2015-01-06 15:31:24 -0400 | |
---|---|---|
committer | 2015-01-06 16:19:41 -0400 | |
commit | c9f1281cdd937e9facd26741b3e42d60a9c5cf28 (patch) | |
tree | d93784c4a23a160d98fbfc40e69818c38ac06525 /Annex | |
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 'Annex')
-rw-r--r-- | Annex/Content/Direct.hs | 2 | ||||
-rw-r--r-- | Annex/Direct/Fixup.hs | 5 |
2 files changed, 4 insertions, 3 deletions
diff --git a/Annex/Content/Direct.hs b/Annex/Content/Direct.hs index d9e1535f3..c09a08f0d 100644 --- a/Annex/Content/Direct.hs +++ b/Annex/Content/Direct.hs @@ -114,7 +114,7 @@ addAssociatedFile key file = do normaliseAssociatedFile :: FilePath -> Annex FilePath normaliseAssociatedFile file = do top <- fromRepo Git.repoPath - liftIO $ relPathDirToFile top <$> absPath file + liftIO $ relPathDirToFile top file {- Checks if a file in the tree, associated with a key, has not been modified. - diff --git a/Annex/Direct/Fixup.hs b/Annex/Direct/Fixup.hs index 13485242a..73cefb134 100644 --- a/Annex/Direct/Fixup.hs +++ b/Annex/Direct/Fixup.hs @@ -10,16 +10,17 @@ module Annex.Direct.Fixup where import Git.Types import Git.Config import qualified Git.Construct as Construct -import Utility.Path import Utility.SafeCommand +import System.FilePath + {- Direct mode repos have core.bare=true, but are not really bare. - Fix up the Repo to be a non-bare repo, and arrange for git commands - run by git-annex to be passed parameters that override this setting. -} fixupDirect :: Repo -> IO Repo fixupDirect r@(Repo { location = l@(Local { gitdir = d, worktree = Nothing }) }) = do let r' = r - { location = l { worktree = Just (parentDir d) } + { location = l { worktree = Just (takeDirectory d) } , gitGlobalOpts = gitGlobalOpts r ++ [ Param "-c" , Param $ coreBare ++ "=" ++ boolConfig False |