module Propellor.Property.Ccache (
hasCache,
hasLimits,
Limit(..),
DataSize,
) where
import Propellor.Base
import qualified Propellor.Property.File as File
import qualified Propellor.Property.Apt as Apt
import Utility.DataUnits
import System.Posix.Files
import qualified Data.Semigroup as Sem
data Limit
= MaxSize DataSize
| MaxFiles Integer
| NoLimit
| Limit :+ Limit
instance Sem.Semigroup Limit where
<> :: Limit -> Limit -> Limit
(<>) = Limit -> Limit -> Limit
(:+)
instance Monoid Limit where
mempty :: Limit
mempty = Limit
NoLimit
mappend :: Limit -> Limit -> Limit
mappend = Limit -> Limit -> Limit
forall a. Semigroup a => a -> a -> a
(Sem.<>)
type DataSize = String
maxSizeParam :: DataSize -> Maybe String
maxSizeParam :: String -> Maybe String
maxSizeParam String
s = [Unit] -> String -> Maybe Integer
readSize [Unit]
dataUnits String
s
Maybe Integer -> (Integer -> Maybe String) -> Maybe String
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Integer
sz -> String -> Maybe String
forall a. a -> Maybe a
Just (String -> Maybe String) -> String -> Maybe String
forall a b. (a -> b) -> a -> b
$ String
"--max-size=" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Integer -> String
ccacheSizeUnits Integer
sz