summaryrefslogtreecommitdiff
path: root/Config
diff options
context:
space:
mode:
authorJoey Hess <joeyh@joeyh.name>2017-02-03 13:40:14 -0400
committerJoey Hess <joeyh@joeyh.name>2017-02-03 13:58:53 -0400
commited56dba86827b83d299cf1847060640e3650fa28 (patch)
tree2367793d0f48f823fbc9a30c013498659c41dc3a /Config
parentd6d23d8a15a81b9044230a33e6dd365cee03a69c (diff)
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.
Diffstat (limited to 'Config')
-rw-r--r--Config/GitConfig.hs36
1 files changed, 36 insertions, 0 deletions
diff --git a/Config/GitConfig.hs b/Config/GitConfig.hs
new file mode 100644
index 0000000000..bac866f0e9
--- /dev/null
+++ b/Config/GitConfig.hs
@@ -0,0 +1,36 @@
+{- git-annex configuration
+ -
+ - Copyright 2017 Joey Hess <id@joeyh.name>
+ -
+ - 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