summaryrefslogtreecommitdiff
path: root/Logs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2017-01-30 17:36:45 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2017-01-30 17:36:45 -0400
commit7e79930d2517183372397334345886ebd20cfc24 (patch)
tree8900c41862f933bdbdb189002255e05365c8752e /Logs
parent8985d7619071569edab523f584755805379ac714 (diff)
forgot to add this new source file
Diffstat (limited to 'Logs')
-rw-r--r--Logs/Config.hs61
1 files changed, 61 insertions, 0 deletions
diff --git a/Logs/Config.hs b/Logs/Config.hs
new file mode 100644
index 000000000..fc26db939
--- /dev/null
+++ b/Logs/Config.hs
@@ -0,0 +1,61 @@
+{- git-annex config log
+ -
+ - Copyright 2017 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Logs.Config (
+ ConfigName,
+ ConfigValue,
+ setGlobalConfig,
+ unsetGlobalConfig,
+ getGlobalConfig,
+ loadGlobalConfig,
+) where
+
+import Annex.Common
+import qualified Annex
+import Logs
+import Logs.MapLog
+import qualified Annex.Branch
+
+import Data.Time.Clock.POSIX
+import qualified Data.Map as M
+
+type ConfigName = String
+type ConfigValue = String
+
+setGlobalConfig :: ConfigName -> ConfigValue -> Annex ()
+setGlobalConfig name new = do
+ curr <- getGlobalConfig name
+ when (curr /= Just new) $
+ setGlobalConfig' name new
+
+setGlobalConfig' :: ConfigName -> ConfigValue -> Annex ()
+setGlobalConfig' name new = do
+ now <- liftIO getPOSIXTime
+ Annex.Branch.change configLog $
+ showMapLog id id . changeMapLog now name new . parseGlobalConfig
+
+unsetGlobalConfig :: ConfigName -> Annex ()
+unsetGlobalConfig name = do
+ curr <- getGlobalConfig name
+ when (curr /= Nothing) $
+ setGlobalConfig' name "" -- set to empty string to unset
+
+getGlobalConfig :: ConfigName -> Annex (Maybe ConfigValue)
+getGlobalConfig name = do
+ m <- maybe loadGlobalConfig return
+ =<< Annex.getState Annex.globalconfig
+ return (M.lookup name m)
+
+parseGlobalConfig :: String -> MapLog ConfigName ConfigValue
+parseGlobalConfig = parseMapLog Just Just
+
+loadGlobalConfig :: Annex (M.Map ConfigName ConfigValue)
+loadGlobalConfig = do
+ m <- M.filter (not . null) . simpleMap . parseGlobalConfig
+ <$> Annex.Branch.get configLog
+ Annex.changeState $ \s -> s { Annex.globalconfig = Just m }
+ return m