diff options
author | Joey Hess <joey@kitenet.net> | 2012-10-16 16:23:50 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2012-10-16 16:25:45 -0400 |
commit | 23e5fd63948b9aa6132ea26b755eb38818d59261 (patch) | |
tree | 6909ccf534a8a191a5b86c444fb58a4357c94374 /Git | |
parent | 4f4aa0bdfd524682facb8245cf840048006bc59b (diff) |
ensure that gitdir is absolute
calcGitLink turns out to need it to be absolute, and it normally is,
but not if it's read from a .git file in a submodule, or perhaps from
GIT_DIR.
I should look into dropping this invariant.
Diffstat (limited to 'Git')
-rw-r--r-- | Git/Construct.hs | 3 | ||||
-rw-r--r-- | Git/CurrentRepo.hs | 7 |
2 files changed, 7 insertions, 3 deletions
diff --git a/Git/Construct.hs b/Git/Construct.hs index 3c1cfdbdf..3d39b0801 100644 --- a/Git/Construct.hs +++ b/Git/Construct.hs @@ -227,7 +227,8 @@ checkForRepo dir = catchDefaultIO "" (readFile $ dir </> ".git") return $ if gitdirprefix `isPrefixOf` c then Just $ Local - { gitdir = drop (length gitdirprefix) c + { gitdir = absPathFrom dir $ + drop (length gitdirprefix) c , worktree = Just dir } else Nothing diff --git a/Git/CurrentRepo.hs b/Git/CurrentRepo.hs index f82241ae2..908cc389e 100644 --- a/Git/CurrentRepo.hs +++ b/Git/CurrentRepo.hs @@ -51,8 +51,11 @@ get = do configure (Just d) r = do r' <- Git.Config.read r -- Let GIT_DIR override the default gitdir. - return $ changelocation r' $ - Local { gitdir = d, worktree = worktree (location r') } + absd <- absPath d + return $ changelocation r' $ Local + { gitdir = absd + , worktree = worktree (location r') + } addworktree w r = changelocation r $ Local { gitdir = gitdir (location r), worktree = w } changelocation r l = r { location = l } |