automatically set and unset core.bare when switching to/from direct mode

This commit is contained in:
Joey Hess 2013-11-05 15:31:37 -04:00
parent 0edd9ec03a
commit 04768e44b2
4 changed files with 18 additions and 7 deletions

View file

@ -45,6 +45,7 @@ import Git.CatFile
import Git.CheckAttr import Git.CheckAttr
import Git.CheckIgnore import Git.CheckIgnore
import Git.SharedRepository import Git.SharedRepository
import Git.Config
import qualified Git.Queue import qualified Git.Queue
import Types.Backend import Types.Backend
import Types.GitConfig import Types.GitConfig
@ -254,8 +255,12 @@ withCurrentState a = do
- Fix up the Repo to be a non-bare repo, and arrange for git commands - 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. -} - run by git-annex to be passed parameters that override this setting. -}
fixupDirect :: Git.Repo -> Git.Repo fixupDirect :: Git.Repo -> Git.Repo
fixupDirect r@(Repo { location = Local { gitdir = d, worktree = Nothing } }) = r fixupDirect r@(Repo { location = Local { gitdir = d, worktree = Nothing } }) =
{ location = Local { gitdir = d </> ".git", worktree = Just d } r
, gitGlobalOpts = gitGlobalOpts r ++ [Param "-c", Param "core.bare=false"] { location = Local { gitdir = d </> ".git", worktree = Just d }
} , gitGlobalOpts = gitGlobalOpts r ++
[ Param "-c"
, Param $ coreBare ++ "=" ++ boolConfig False
]
}
fixupDirect r = r fixupDirect r = r

View file

@ -73,8 +73,11 @@ isDirect = annexDirect <$> Annex.getGitConfig
setDirect :: Bool -> Annex () setDirect :: Bool -> Annex ()
setDirect b = do setDirect b = do
setConfig (annexConfig "direct") (Git.Config.boolConfig b) setConfig (annexConfig "direct") val
setConfig (ConfigKey Git.Config.coreBare) val
Annex.changeGitConfig $ \c -> c { annexDirect = b } Annex.changeGitConfig $ \c -> c { annexDirect = b }
where
val = Git.Config.boolConfig b
crippledFileSystem :: Annex Bool crippledFileSystem :: Annex Bool
crippledFileSystem = annexCrippledFileSystem <$> Annex.getGitConfig crippledFileSystem = annexCrippledFileSystem <$> Annex.getGitConfig

View file

@ -153,7 +153,10 @@ boolConfig True = "true"
boolConfig False = "false" boolConfig False = "false"
isBare :: Repo -> Bool isBare :: Repo -> Bool
isBare r = fromMaybe False $ isTrue =<< getMaybe "core.bare" r isBare r = fromMaybe False $ isTrue =<< getMaybe coreBare r
coreBare :: String
coreBare = "core.bare"
{- Runs a command to get the configuration of a repo, {- Runs a command to get the configuration of a repo,
- and returns a repo populated with the configuration, as well as the raw - and returns a repo populated with the configuration, as well as the raw

2
debian/changelog vendored
View file

@ -1,6 +1,6 @@
git-annex (4.20131102) UNRELEASED; urgency=low git-annex (4.20131102) UNRELEASED; urgency=low
* Direct mode repositories can now have core.bare=true set, to prevent * Direct mode repositories now have core.bare=true set, to prevent
accidentally running git commands that try to operate on the work tree, accidentally running git commands that try to operate on the work tree,
and so do the wrong thing. and so do the wrong thing.
* The -c option now not only modifies the git configuration seen by * The -c option now not only modifies the git configuration seen by