aboutsummaryrefslogtreecommitdiff
path: root/Command
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2017-01-30 15:11:26 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2017-01-30 15:27:25 -0400
commitdc2095666d7b8e39ec3e1f2f26dca7eceff34877 (patch)
tree1318374f174afc23da83910d0a23aa24c0ae4af7 /Command
parent0a3f602b6367d7ac71947e9d38ea8004f28a465a (diff)
vicfg: Include the numcopies configuation.
Docs say vicfg can configure everything from git-annex branch, so it ought to configure numcopies. Note that commenting out existing numcopies does not unset it. This commit was sponsored by Thom May on Patreon.
Diffstat (limited to 'Command')
-rw-r--r--Command/Vicfg.hs23
1 files changed, 21 insertions, 2 deletions
diff --git a/Command/Vicfg.hs b/Command/Vicfg.hs
index d9e8b8823..55aa21e46 100644
--- a/Command/Vicfg.hs
+++ b/Command/Vicfg.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2012-2014 Joey Hess <id@joeyh.name>
+ - Copyright 2012-2017 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -24,12 +24,14 @@ import Logs.Trust
import Logs.Group
import Logs.PreferredContent
import Logs.Schedule
+import Logs.NumCopies
import Types.StandardGroups
import Types.ScheduledActivity
+import Types.NumCopies
import Remote
cmd :: Command
-cmd = command "vicfg" SectionSetup "edit git-annex's configuration"
+cmd = command "vicfg" SectionSetup "edit configuration in git-annex branch"
paramNothing (withParams seek)
seek :: CmdParams -> CommandSeek
@@ -66,6 +68,7 @@ data Cfg = Cfg
, cfgRequiredContentMap :: M.Map UUID PreferredContentExpression
, cfgGroupPreferredContentMap :: M.Map Group PreferredContentExpression
, cfgScheduleMap :: M.Map UUID [ScheduledActivity]
+ , cfgNumCopies :: Maybe NumCopies
}
getCfg :: Annex Cfg
@@ -76,6 +79,7 @@ getCfg = Cfg
<*> requiredContentMapRaw
<*> groupPreferredContentMapRaw
<*> scheduleMap
+ <*> getGlobalNumCopies
setCfg :: Cfg -> Cfg -> Annex ()
setCfg curcfg newcfg = do
@@ -86,6 +90,7 @@ setCfg curcfg newcfg = do
mapM_ (uncurry requiredContentSet) $ M.toList $ cfgRequiredContentMap diff
mapM_ (uncurry groupPreferredContentSet) $ M.toList $ cfgGroupPreferredContentMap diff
mapM_ (uncurry scheduleSet) $ M.toList $ cfgScheduleMap diff
+ maybe noop setGlobalNumCopies $ cfgNumCopies diff
{- Default config has all the keys from the input config, but with their
- default values. -}
@@ -97,6 +102,7 @@ defCfg curcfg = Cfg
, cfgRequiredContentMap = mapdef $ cfgRequiredContentMap curcfg
, cfgGroupPreferredContentMap = mapdef $ cfgGroupPreferredContentMap curcfg
, cfgScheduleMap = mapdef $ cfgScheduleMap curcfg
+ , cfgNumCopies = Nothing
}
where
mapdef :: forall k v. Default v => M.Map k v -> M.Map k v
@@ -110,6 +116,7 @@ diffCfg curcfg newcfg = Cfg
, cfgRequiredContentMap = diff cfgRequiredContentMap
, cfgGroupPreferredContentMap = diff cfgGroupPreferredContentMap
, cfgScheduleMap = diff cfgScheduleMap
+ , cfgNumCopies = cfgNumCopies newcfg
}
where
diff f = M.differenceWith (\x y -> if x == y then Nothing else Just x)
@@ -125,6 +132,7 @@ genCfg cfg descs = unlines $ intercalate [""]
, standardgroups
, requiredcontent
, schedule
+ , others
]
where
intro =
@@ -201,6 +209,14 @@ genCfg cfg descs = unlines $ intercalate [""]
[ com $ "(for " ++ fromMaybe "" (M.lookup u descs) ++ ")"
, unwords [setting, fromUUID u, "=", val]
]
+
+ line' setting Nothing = com $ unwords [setting, "default", "="]
+ line' setting (Just val) = unwords [setting, "default", "=", val]
+
+ others =
+ [ com "Other configuration"
+ , line' "numcopies" (show . fromNumCopies <$> cfgNumCopies cfg)
+ ]
settings :: Ord v => Cfg -> M.Map UUID String -> (Cfg -> M.Map UUID v) -> [String] -> ((v, UUID) -> [String]) -> (UUID -> [String]) -> [String]
settings cfg descs = settings' cfg (M.keysSet descs)
@@ -274,6 +290,9 @@ parseCfg defcfg = go [] defcfg . lines
Right l ->
let m = M.insert u l (cfgScheduleMap cfg)
in Right $ cfg { cfgScheduleMap = m }
+ | setting == "numcopies" = case readish val of
+ Nothing -> Left "parse error (expected an integer)"
+ Just n -> Right $ cfg { cfgNumCopies = Just (NumCopies n) }
| otherwise = badval "setting" setting
where
u = toUUID f