aboutsummaryrefslogtreecommitdiffstats
path: root/app/Process.hs
diff options
context:
space:
mode:
Diffstat (limited to 'app/Process.hs')
-rw-r--r--app/Process.hs25
1 files changed, 25 insertions, 0 deletions
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