summaryrefslogtreecommitdiff
path: root/Command/NumCopies.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2014-01-20 16:47:56 -0400
committerGravatar Joey Hess <joey@kitenet.net>2014-01-20 16:47:56 -0400
commit8cd1d9ed5ebf96d9e39116f63900ccd7be8d907e (patch)
tree9d4bb88a930f28120de40556eeec906de7df39d0 /Command/NumCopies.hs
parent5534e89870b7d0885f6fe113068c0514a03a74bd (diff)
global numcopies setting
* numcopies: New command, sets global numcopies value that is seen by all clones of a repository. * The annex.numcopies git config setting is deprecated. Once the numcopies command is used to set the global number of copies, any annex.numcopies git configs will be ignored. * assistant: Make the prefs page set the global numcopies. This global numcopies setting is needed to let preferred content expressions operate on numcopies. It's also convenient, because typically if you want git-annex to preserve N copies of files in a repo, you want it to do that no matter which repo it's running in. Making it global avoids needing to warn the user about gotchas involving inconsistent annex.numcopies settings. (See changes to doc/numcopies.mdwn.) Added a new variety of git-annex branch log file, that holds only 1 value. Will probably be useful for other stuff later. This commit was sponsored by Nicolas Pouillard.
Diffstat (limited to 'Command/NumCopies.hs')
-rw-r--r--Command/NumCopies.hs56
1 files changed, 56 insertions, 0 deletions
diff --git a/Command/NumCopies.hs b/Command/NumCopies.hs
new file mode 100644
index 000000000..804faff58
--- /dev/null
+++ b/Command/NumCopies.hs
@@ -0,0 +1,56 @@
+{- git-annex command
+ -
+ - Copyright 2014 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.NumCopies where
+
+import Common.Annex
+import qualified Annex
+import Command
+import Logs.NumCopies
+import Types.Messages
+
+def :: [Command]
+def = [command "numcopies" paramNumber seek
+ SectionSetup "configure desired number of copies"]
+
+seek :: CommandSeek
+seek = withWords start
+
+start :: [String] -> CommandStart
+start [] = startGet
+start [s] = do
+ case readish s of
+ Nothing -> error $ "Bad number: " ++ s
+ Just n
+ | n > 0 -> startSet n
+ | n == 0 -> ifM (Annex.getState Annex.force)
+ ( startSet n
+ , error "Setting numcopies to 0 is very unsafe. You will lose data! If you really want to do that, specify --force."
+ )
+ | otherwise -> error "Number cannot be negative!"
+start _ = error "Specify a single number."
+
+startGet :: CommandStart
+startGet = next $ next $ do
+ Annex.setOutput QuietOutput
+ v <- getGlobalNumCopies
+ case v of
+ Just n -> liftIO $ putStrLn $ show n
+ Nothing -> do
+ liftIO $ putStrLn $ "global numcopies is not set"
+ old <- annexNumCopies <$> Annex.getGitConfig
+ case old of
+ Nothing -> liftIO $ putStrLn "(default is 1)"
+ Just n -> liftIO $ putStrLn $ "(deprecated git config annex.numcopies is set to " ++ show n ++ " locally)"
+ return True
+
+startSet :: Int -> CommandStart
+startSet n = do
+ showStart "numcopies" (show n)
+ next $ next $ do
+ setGlobalNumCopies n
+ return True