From 4cded2bc85d530dd335738cb870daf3a2d4e4a2f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 3 Feb 2017 13:40:14 -0400 Subject: annex.autocommit can be configured via git-annex config ... to control the default behavior in all clones of a repository. This includes a new Configurable data type, so the GitConfig type indicates which values can be configured this way. The implementation should be quite efficient; the config log is only read once, and only when a Configurable value has not already been set by git-config. Indeed, it would be nice in the future to extend this, so that git-config is itself only read on demand. Some commands may not need to look at the git configuration at all. This commit was sponsored by Trenton Cronholm on Patreon. --- Config/GitConfig.hs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Config/GitConfig.hs (limited to 'Config') diff --git a/Config/GitConfig.hs b/Config/GitConfig.hs new file mode 100644 index 000000000..bac866f0e --- /dev/null +++ b/Config/GitConfig.hs @@ -0,0 +1,36 @@ +{- git-annex configuration + - + - Copyright 2017 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Config.GitConfig where + +import Annex.Common +import qualified Annex +import Types.GitConfig +import Git.Types +import Logs.Config + +{- Gets a specific setting from GitConfig. If necessary, loads the + - repository-global defaults when the GitConfig does not yet + - have a value. -} +getGitConfigVal :: (GitConfig -> Configurable a) -> Annex a +getGitConfigVal f = do + v <- f <$> Annex.getGitConfig + case v of + HasConfig c -> return c + DefaultConfig _ -> do + r <- Annex.gitRepo + m <- loadGlobalConfig + let globalgc = extractGitConfig (r { config = m }) + -- This merge of the repo-global config and the git + -- config makes all repository-global default + -- values populate the GitConfig with HasConfig + -- values, so it will only need to be done once. + Annex.changeGitConfig (\gc -> mergeGitConfig gc globalgc) + v' <- f <$> Annex.getGitConfig + case v' of + HasConfig c -> return c + DefaultConfig d -> return d -- cgit v1.2.3