summaryrefslogtreecommitdiff
path: root/src/Propellor/Property/Cmd.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Propellor/Property/Cmd.hs')
-rw-r--r--src/Propellor/Property/Cmd.hs27
1 files changed, 18 insertions, 9 deletions
diff --git a/src/Propellor/Property/Cmd.hs b/src/Propellor/Property/Cmd.hs
index 9536f71d..b02376a3 100644
--- a/src/Propellor/Property/Cmd.hs
+++ b/src/Propellor/Property/Cmd.hs
@@ -32,22 +32,31 @@ import Utility.Process (createProcess, CreateProcess, waitForProcess)
-- | A property that can be satisfied by running a command.
--
-- The command must exit 0 on success.
-cmdProperty :: String -> [String] -> Property NoInfo
+--
+-- This and other properties in this module are `UncheckedProperty`,
+-- and return `NoChange`. It's up to the user to check if the command
+-- made a change to the system, perhaps by using `checkResult` or
+-- `changesFile`, or you can use @cmdProperty "foo" ["bar"] `assume` MadeChange@
+cmdProperty :: String -> [String] -> UncheckedProperty NoInfo
cmdProperty cmd params = cmdProperty' cmd params id
-cmdProperty' :: String -> [String] -> (CreateProcess -> CreateProcess) -> Property NoInfo
-cmdProperty' cmd params mkprocess = property desc $ liftIO $ do
- toResult <$> boolSystem' cmd (map Param params) mkprocess
+cmdProperty' :: String -> [String] -> (CreateProcess -> CreateProcess) -> UncheckedProperty NoInfo
+cmdProperty' cmd params mkprocess = unchecked $ property desc $ liftIO $
+ cmdResult <$> boolSystem' cmd (map Param params) mkprocess
where
desc = unwords $ cmd : params
+cmdResult :: Bool -> Result
+cmdResult False = FailedChange
+cmdResult True = NoChange
+
-- | A property that can be satisfied by running a command,
-- with added environment variables in addition to the standard
-- environment.
-cmdPropertyEnv :: String -> [String] -> [(String, String)] -> Property NoInfo
-cmdPropertyEnv cmd params env = property desc $ liftIO $ do
+cmdPropertyEnv :: String -> [String] -> [(String, String)] -> UncheckedProperty NoInfo
+cmdPropertyEnv cmd params env = unchecked $ property desc $ liftIO $ do
env' <- addEntries env <$> getEnvironment
- toResult <$> boolSystemEnv cmd (map Param params) (Just env')
+ cmdResult <$> boolSystemEnv cmd (map Param params) (Just env')
where
desc = unwords $ cmd : params
@@ -55,14 +64,14 @@ cmdPropertyEnv cmd params env = property desc $ liftIO $ do
type Script = [String]
-- | A property that can be satisfied by running a script.
-scriptProperty :: Script -> Property NoInfo
+scriptProperty :: Script -> UncheckedProperty NoInfo
scriptProperty script = cmdProperty "sh" ["-c", shellcmd]
where
shellcmd = intercalate " ; " ("set -e" : script)
-- | A property that can satisfied by running a script
-- as user (cd'd to their home directory).
-userScriptProperty :: User -> Script -> Property NoInfo
+userScriptProperty :: User -> Script -> UncheckedProperty NoInfo
userScriptProperty (User user) script = cmdProperty "su" ["--shell", "/bin/sh", "-c", shellcmd, user]
where
shellcmd = intercalate " ; " ("set -e" : "cd" : script)