reorganize numcopies code (no behavior changes)

Move stuff into Logs.NumCopies. Add a NumCopies newtype.

Better names for various serialization classes that are specific to one
thing or another.
This commit is contained in:
Joey Hess 2014-01-21 16:08:19 -04:00
parent e38a21a768
commit b40df4f0d0
20 changed files with 137 additions and 98 deletions

View file

@ -7,27 +7,71 @@
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Logs.NumCopies where
module Logs.NumCopies (
module Types.NumCopies,
setGlobalNumCopies,
getGlobalNumCopies,
globalNumCopiesLoad,
getFileNumCopies,
numCopiesCheck,
getNumCopies,
deprecatedNumCopies,
) where
import Common.Annex
import qualified Annex
import Types.NumCopies
import Logs
import Logs.SingleValue
import Logs.Trust
import Annex.CheckAttr
import qualified Remote
instance Serializable Int where
serialize = show
deserialize = readish
instance SingleValueSerializable NumCopies where
serialize (NumCopies n) = show n
deserialize = NumCopies <$$> readish
setGlobalNumCopies :: Int -> Annex ()
setGlobalNumCopies :: NumCopies -> Annex ()
setGlobalNumCopies = setLog numcopiesLog
{- Cached for speed. -}
getGlobalNumCopies :: Annex (Maybe Int)
getGlobalNumCopies = maybe numCopiesLoad (return . Just)
getGlobalNumCopies :: Annex (Maybe NumCopies)
getGlobalNumCopies = maybe globalNumCopiesLoad (return . Just)
=<< Annex.getState Annex.globalnumcopies
numCopiesLoad :: Annex (Maybe Int)
numCopiesLoad = do
globalNumCopiesLoad :: Annex (Maybe NumCopies)
globalNumCopiesLoad = do
v <- getLog numcopiesLog
Annex.changeState $ \s -> s { Annex.globalnumcopies = v }
return v
{- Numcopies value for a file, from .gitattributes or global,
- but not the deprecated git config. -}
getFileNumCopies :: FilePath -> Annex (Maybe NumCopies)
getFileNumCopies file = do
global <- getGlobalNumCopies
case global of
Just n -> return $ Just n
Nothing -> (NumCopies <$$> readish)
<$> checkAttr "annex.numcopies" file
deprecatedNumCopies :: Annex NumCopies
deprecatedNumCopies = NumCopies . fromMaybe 1 . annexNumCopies
<$> Annex.getGitConfig
{- Checks if numcopies are satisfied by running a comparison
- between the number of (not untrusted) copies that are
- belived to exist, and the configured value.
-
- Includes the deprecated annex.numcopies git config if
- nothing else specifies a numcopies value. -}
numCopiesCheck :: FilePath -> Key -> (Int -> Int -> v) -> Annex v
numCopiesCheck file key vs = do
numcopiesattr <- getFileNumCopies file
NumCopies needed <- getNumCopies numcopiesattr
have <- trustExclude UnTrusted =<< Remote.keyLocations key
return $ length have `vs` needed
getNumCopies :: Maybe NumCopies -> Annex NumCopies
getNumCopies (Just v) = return v
getNumCopies Nothing = deprecatedNumCopies