From 23e5fd63948b9aa6132ea26b755eb38818d59261 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 16 Oct 2012 16:23:50 -0400 Subject: 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. --- Git/Construct.hs | 3 ++- 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 } -- cgit v1.2.3