36 lines
879 B
Haskell
36 lines
879 B
Haskell
module Property.Cmd (
|
|
cmdProperty,
|
|
cmdProperty',
|
|
scriptProperty,
|
|
module Utility.SafeCommand
|
|
) where
|
|
|
|
import Control.Applicative
|
|
import Data.List
|
|
|
|
import Types
|
|
import Utility.Monad
|
|
import Utility.SafeCommand
|
|
import Utility.Env
|
|
|
|
cmdProperty :: String -> [CommandParam] -> Property
|
|
cmdProperty cmd params = cmdProperty' cmd params []
|
|
|
|
cmdProperty' :: String -> [CommandParam] -> [(String, String)] -> Property
|
|
cmdProperty' cmd params env = Property desc $ do
|
|
env' <- addEntries env <$> getEnvironment
|
|
ifM (boolSystemEnv cmd params (Just env'))
|
|
( return MadeChange
|
|
, return FailedChange
|
|
)
|
|
where
|
|
desc = unwords $ cmd : map showp params
|
|
showp (Params s) = s
|
|
showp (Param s) = s
|
|
showp (File s) = s
|
|
|
|
scriptProperty :: [String] -> Property
|
|
scriptProperty script = cmdProperty "sh" [Param "-c", Param shellcmd]
|
|
where
|
|
shellcmd = intercalate " ; " ("set -e" : script)
|