forgot to add this new source file
authorJoey Hess <joeyh@joeyh.name>
Mon, 30 Jan 2017 21:36:45 +0000 (17:36 -0400)
committerJoey Hess <joeyh@joeyh.name>
Mon, 30 Jan 2017 21:36:45 +0000 (17:36 -0400)
Logs/Config.hs [new file with mode: 0644]

diff --git a/Logs/Config.hs b/Logs/Config.hs
new file mode 100644 (file)
index 0000000..fc26db9
--- /dev/null
@@ -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