Additional GIT_DIR support bugfixes. May actually work now.
Two fixes. First, and most importantly, relax the isLinkToAnnex check to only look for /annex/objects/, not [^|/].git/annex/objects. If GIT_DIR is used with a detached work tree, the git directory is not necessarily named .git. There are important caveats with doing that at all, since git-annex will make symlinks that point at GIT_DIR, which means that the relative path between GIT_DIR and GIT_WORK_TREE needs to remain stable across all clones of the repository. ---- The other fix is just fixing crazy and wrong code that, when GIT_DIR is set, expects to still find a git repository in the path below the work tree, and uses some of its configuration, and some of GIT_DIR. What was I thinking, and why can't I seem to get this code right?
This commit is contained in:
parent
acc3c8c157
commit
8d9c2afd89
4 changed files with 24 additions and 20 deletions
|
@ -47,15 +47,15 @@ get = do
|
|||
unsetEnv s
|
||||
Just <$> absPath d
|
||||
Nothing -> return Nothing
|
||||
configure Nothing r = Git.Config.read r
|
||||
configure (Just d) r = do
|
||||
r' <- Git.Config.read r
|
||||
-- Let GIT_DIR override the default gitdir.
|
||||
|
||||
configure Nothing (Just r) = Git.Config.read r
|
||||
configure (Just d) _ = do
|
||||
absd <- absPath d
|
||||
return $ changelocation r' $ Local
|
||||
{ gitdir = absd
|
||||
, worktree = worktree (location r')
|
||||
}
|
||||
cwd <- getCurrentDirectory
|
||||
r <- newFrom $ Local { gitdir = absd, worktree = Just cwd }
|
||||
Git.Config.read r
|
||||
configure Nothing Nothing = error "Not in a git repository."
|
||||
|
||||
addworktree w r = changelocation r $
|
||||
Local { gitdir = gitdir (location r), worktree = w }
|
||||
changelocation r l = r { location = l }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue