From a0c72a80fbfed8e0963edff17ab5d52d2e3abd5b Mon Sep 17 00:00:00 2001 From: Fabian Kirchner Date: Fri, 13 Oct 2023 21:24:04 +0200 Subject: refactor: extract sh and sh_ into Process --- app/Process.hs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 app/Process.hs (limited to 'app/Process.hs') diff --git a/app/Process.hs b/app/Process.hs new file mode 100644 index 0000000..39132d4 --- /dev/null +++ b/app/Process.hs @@ -0,0 +1,25 @@ +module Process (sh, sh_, quote) where + +import Control.Exception (Exception, throwIO) +import Data.ByteString.Lazy (ByteString) +import System.Exit (ExitCode (ExitSuccess)) +import System.Process.Typed (ProcessConfig, readProcess, readProcessStderr) + +data ProcessException = ProcessException String ExitCode ByteString + deriving (Show) + +instance Exception ProcessException + +sh :: ProcessConfig stdin stdoutIgnored stderr -> IO ByteString +sh proc = do + (exitCode, out, err) <- readProcess proc + if exitCode == ExitSuccess + then pure out + else throwIO $ ProcessException (show proc) exitCode err + +sh_ :: ProcessConfig stdin stdoutIgnored stderr -> IO () +sh_ proc = do + (exitCode, err) <- readProcessStderr proc + if exitCode == ExitSuccess + then pure () + else throwIO $ ProcessException (show proc) exitCode err -- cgit v1.2.3