From 9d348647d9d1b47d0119b3988e0ece9aa383d166 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 31 Mar 2014 01:06:44 -0400 Subject: propellor spin --- Propellor/Engine.hs | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 Propellor/Engine.hs (limited to 'Propellor/Engine.hs') 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 -- cgit v1.2.3