@@ -24,6 +24,7 @@ module Obelisk.CliApp.Process
25import Control.Monad ((<=<), join, void)
25import Control.Monad ((<=<), join, void)
26import Control.Monad.Except (throwError)
26import Control.Monad.Except (throwError)
27+import Control.Monad.Fail
27import Control.Monad.IO.Class (MonadIO, liftIO)
28import Control.Monad.IO.Class (MonadIO, liftIO)
28import Control.Lens (Prism', review)
29import Control.Lens (Prism', review)
29import qualified Data.ByteString as BS
30import qualified Data.ByteString as BS
@@ -60,7 +61,7 @@ instance AsProcessFailure ProcessFailure where
60 asProcessFailure = id
61 asProcessFailure = id
62readProcessAndLogStderr
63readProcessAndLogStderr
63− :: (MonadIO m, CliLog m, CliThrow e m, AsProcessFailure e)
64+ :: (MonadIO m, CliLog m, CliThrow e m, AsProcessFailure e, MonadFail m)
64 => Severity -> CreateProcess -> m Text
65 => Severity -> CreateProcess -> m Text
65readProcessAndLogStderr sev process = do
66readProcessAndLogStderr sev process = do
66 (out, _err) <- withProcess process $ \_out err -> do
67 (out, _err) <- withProcess process $ \_out err -> do
@@ -82,7 +83,7 @@ readCreateProcessWithExitCode process = do
82-- which case it is advisable to call it with a non-Error severity for stderr, like
83-- which case it is advisable to call it with a non-Error severity for stderr, like
83-- `callProcessAndLogOutput (Debug, Debug)`.
84-- `callProcessAndLogOutput (Debug, Debug)`.
84readProcessAndLogOutput
85readProcessAndLogOutput
85− :: (MonadIO m, CliLog m, CliThrow e m, AsProcessFailure e)
86+ :: (MonadIO m, CliLog m, CliThrow e m, AsProcessFailure e, MonadFail m)
86 => (Severity, Severity) -> CreateProcess -> m Text
87 => (Severity, Severity) -> CreateProcess -> m Text
87readProcessAndLogOutput (sev_out, sev_err) process = do
88readProcessAndLogOutput (sev_out, sev_err) process = do
88 (_, Just out, Just err, p) <- createProcess $ process
89 (_, Just out, Just err, p) <- createProcess $ process
@@ -106,7 +107,7 @@ readProcessAndLogOutput (sev_out, sev_err) process = do
106-- `callProcessAndLogOutput (Debug, Debug)`.
107-- `callProcessAndLogOutput (Debug, Debug)`.
107callProcessAndLogOutput
108callProcessAndLogOutput
109− :: (MonadIO m, CliLog m, CliThrow e m, AsProcessFailure e)
110+ :: (MonadIO m, CliLog m, CliThrow e m, AsProcessFailure e, MonadFail m)
110 => (Severity, Severity) -> CreateProcess -> m ()
111 => (Severity, Severity) -> CreateProcess -> m ()
111callProcessAndLogOutput (sev_out, sev_err) process =
112callProcessAndLogOutput (sev_out, sev_err) process =
112 void $ withProcess process $ \out err -> do
113 void $ withProcess process $ \out err -> do
@@ -150,7 +151,7 @@ callCommand cmd = do
150 liftIO $ Process.callCommand cmd
151 liftIO $ Process.callCommand cmd
152withProcess
153withProcess
153− :: (MonadIO m, CliLog m, CliThrow e m, AsProcessFailure e)
154+ :: (MonadIO m, CliLog m, CliThrow e m, AsProcessFailure e, MonadFail m)
154 => CreateProcess -> (Handle -> Handle -> m ()) -> m (Handle, Handle)
155 => CreateProcess -> (Handle -> Handle -> m ()) -> m (Handle, Handle)
155withProcess process f = do -- TODO: Use bracket.
156withProcess process f = do -- TODO: Use bracket.
156 -- FIXME: Using `withCreateProcess` here leads to something operating illegally on closed handles.
157 -- FIXME: Using `withCreateProcess` here leads to something operating illegally on closed handles.