automatically set and unset core.bare when switching to/from direct mode
This commit is contained in:
parent
0edd9ec03a
commit
04768e44b2
4 changed files with 18 additions and 7 deletions
13
Annex.hs
13
Annex.hs
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
2
debian/changelog
vendored
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue