summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG1
-rw-r--r--Command/Vicfg.hs23
-rw-r--r--Logs/NumCopies.hs5
-rw-r--r--doc/git-annex-numcopies.mdwn5
-rw-r--r--doc/git-annex-vicfg.mdwn13
5 files changed, 39 insertions, 8 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 16601dfea..57994f156 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -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>