diff options
author | Joey Hess <joeyh@joeyh.name> | 2017-01-30 15:11:26 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2017-01-30 15:27:25 -0400 |
commit | dc2095666d7b8e39ec3e1f2f26dca7eceff34877 (patch) | |
tree | 1318374f174afc23da83910d0a23aa24c0ae4af7 | |
parent | 0a3f602b6367d7ac71947e9d38ea8004f28a465a (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.
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | Command/Vicfg.hs | 23 | ||||
-rw-r--r-- | Logs/NumCopies.hs | 5 | ||||
-rw-r--r-- | doc/git-annex-numcopies.mdwn | 5 | ||||
-rw-r--r-- | doc/git-annex-vicfg.mdwn | 13 |
5 files changed, 39 insertions, 8 deletions
@@ -5,6 +5,7 @@ git-annex (6.20170102) UNRELEASED; urgency=medium remotes when possible. * Remove -j short option for --json-progress; that option was already taken for --json. + * vicfg: Include the numcopies configuation. -- Joey Hess <id@joeyh.name> Fri, 06 Jan 2017 15:22:06 -0400 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 diff --git a/Logs/NumCopies.hs b/Logs/NumCopies.hs index a4bca5b07..7593d6c03 100644 --- a/Logs/NumCopies.hs +++ b/Logs/NumCopies.hs @@ -24,7 +24,10 @@ instance SingleValueSerializable NumCopies where deserialize = NumCopies <$$> readish setGlobalNumCopies :: NumCopies -> Annex () -setGlobalNumCopies = setLog numcopiesLog +setGlobalNumCopies new = do + curr <- getGlobalNumCopies + when (curr /= Just new) $ + setLog numcopiesLog new {- Value configured in the numcopies log. Cached for speed. -} getGlobalNumCopies :: Annex (Maybe NumCopies) diff --git a/doc/git-annex-numcopies.mdwn b/doc/git-annex-numcopies.mdwn index b29cbb8bf..96701e1ef 100644 --- a/doc/git-annex-numcopies.mdwn +++ b/doc/git-annex-numcopies.mdwn @@ -9,10 +9,13 @@ git annex numcopies `N` # DESCRIPTION Tells git-annex how many copies it should preserve of files, over all -repositories. The default is 1. +repositories. The default is 1. Run without a number to get the current value. +This configuration is stored in the git-annex branch, so it will be seen +by all clones of the repository. + When git-annex is asked to drop a file, it first verifies that the required number of copies can be satisfied among all the other repositories that have a copy of the file. diff --git a/doc/git-annex-vicfg.mdwn b/doc/git-annex-vicfg.mdwn index 171a4acef..45bbb9b7f 100644 --- a/doc/git-annex-vicfg.mdwn +++ b/doc/git-annex-vicfg.mdwn @@ -1,6 +1,6 @@ # NAME -git-annex vicfg - edit git-annex's configuration +git-annex vicfg - edit configuration in git-annex branch # SYNOPSIS @@ -8,14 +8,19 @@ git annex vicfg # DESCRIPTION -Opens EDITOR on a temp file containing all of git-annex's global -configuration settings, and when it exits, stores any -changes made back to the git-annex branch. +Opens EDITOR on a temp file containing all of git-annex's +configuration settings that are stored in the git-annex branch, +and when it exits, stores any changes made back to the git-annex branch. + +Unlike git config settings, these configuration settings can be seen +by all clones of the repository. # SEE ALSO [[git-annex]](1) +git-config(1) + # AUTHOR Joey Hess <id@joeyh.name> |