summaryrefslogtreecommitdiff
path: root/Propellor/Engine.hs
diff options
context:
space:
mode:
authorJoey Hess2014-03-31 01:06:44 -0400
committerJoey Hess2014-03-31 01:06:44 -0400
commit9d348647d9d1b47d0119b3988e0ece9aa383d166 (patch)
tree395083db20bd8e8508a730af7d8ca031f6f79ca3 /Propellor/Engine.hs
parent2383674638d14b18a668fa2fcd2689724b4ae4cc (diff)
propellor spin
Diffstat (limited to 'Propellor/Engine.hs')
-rw-r--r--Propellor/Engine.hs47
1 files changed, 47 insertions, 0 deletions
diff --git a/Propellor/Engine.hs b/Propellor/Engine.hs
new file mode 100644
index 00000000..e5f8a965
--- /dev/null
+++ b/Propellor/Engine.hs
@@ -0,0 +1,47 @@
+module Propellor.Engine where
+
+import System.Console.ANSI
+import System.Exit
+import System.IO
+
+import Propellor.Types
+import Utility.Exception
+
+ensureProperty :: Property -> IO Result
+ensureProperty = catchDefaultIO FailedChange . propertySatisfy
+
+ensureProperties :: [Property] -> IO ()
+ensureProperties ps = do
+ r <- ensureProperties' [Property "overall" $ ensureProperties' ps]
+ case r of
+ FailedChange -> exitWith (ExitFailure 1)
+ _ -> exitWith ExitSuccess
+
+ensureProperties' :: [Property] -> IO Result
+ensureProperties' ps = ensure ps NoChange
+ where
+ ensure [] rs = return rs
+ ensure (l:ls) rs = do
+ r <- ensureProperty l
+ clearFromCursorToLineBeginning
+ setCursorColumn 0
+ putStr $ propertyDesc l ++ "... "
+ case r of
+ FailedChange -> do
+ setSGR [SetColor Foreground Vivid Red]
+ putStrLn "failed"
+ NoChange -> do
+ setSGR [SetColor Foreground Dull Green]
+ putStrLn "unchanged"
+ MadeChange -> do
+ setSGR [SetColor Foreground Vivid Green]
+ putStrLn "done"
+ setSGR []
+ ensure ls (combineResult r rs)
+
+warningMessage :: String -> IO ()
+warningMessage s = do
+ setSGR [SetColor Foreground Vivid Red]
+ putStrLn $ "** warning: " ++ s
+ setSGR []
+ hFlush stdout