Karya, built on 2023-08-29T07:47:28 (patch 7a412d5d6ba4968ca4155ef276a062ccdeb9109a)
Safe HaskellSafe-Inferred

Util.Processes

Description

Utilities to deal with processes.

Synopsis

Documentation

supervised :: Process.CreateProcess -> IO.IO () Source #

Start a subprocess, wait for it to complete, and kill it if this thread is killed. This is like Async.withAsync, except for a subprocess, and it's hardcoded to wait for the subprocess.

TODO use Process.withCreateProcess? TODO I think multipleOutput makes this obsolete.

waitAndLog :: Process.CreateProcess -> Maybe Process.ProcessHandle -> IO.IO () Source #

Wait for the process (if it started) and log if it didn't exit successfully.

call :: IO.FilePath -> [String.String] -> IO.IO () Source #

Like Process.callProcess, but log if the binary wasn't found or failed.

create :: Process.CreateProcess -> IO.IO (Maybe IO.Handle, Maybe IO.Handle, Maybe IO.Handle, Maybe Process.ProcessHandle) Source #

Like Process.createProcess, but return a Nothing instead of a pid if the binary doesn't exist.

conversation

data TalkOut Source #

Constructors

Stdout !Text 
Stderr !Text 
Exit !Exit

This always terminates the conversation, and effectively marks the channel closed.

Instances

Instances details
Show TalkOut Source # 
Instance details

Defined in Util.Processes

Eq TalkOut Source # 
Instance details

Defined in Util.Processes

Methods

(==) :: TalkOut -> TalkOut -> Bool #

(/=) :: TalkOut -> TalkOut -> Bool #

Ord TalkOut Source # 
Instance details

Defined in Util.Processes

data TalkIn Source #

Constructors

Text !Text 
EOF 

Instances

Instances details
String.IsString TalkIn Source # 
Instance details

Defined in Util.Processes

Show TalkIn Source # 
Instance details

Defined in Util.Processes

Eq TalkIn Source # 
Instance details

Defined in Util.Processes

Methods

(==) :: TalkIn -> TalkIn -> Bool #

(/=) :: TalkIn -> TalkIn -> Bool #

data Exit Source #

Instances

Instances details
Show Exit Source # 
Instance details

Defined in Util.Processes

Eq Exit Source # 
Instance details

Defined in Util.Processes

Methods

(==) :: Exit -> Exit -> Bool #

(/=) :: Exit -> Exit -> Bool #

Ord Exit Source # 
Instance details

Defined in Util.Processes

Methods

compare :: Exit -> Exit -> Ordering #

(<) :: Exit -> Exit -> Bool #

(<=) :: Exit -> Exit -> Bool #

(>) :: Exit -> Exit -> Bool #

(>=) :: Exit -> Exit -> Bool #

max :: Exit -> Exit -> Exit #

min :: Exit -> Exit -> Exit #

conversation :: IO.FilePath -> [String.String] -> Maybe [(String.String, String.String)] -> Chan.Chan TalkIn -> (Chan.Chan TalkOut -> IO.IO a) -> IO.IO a Source #

Have a conversation with a subprocess. This doesn't use ptys, so this will only work if the subprocess explicitly doesn't use block buffering.

multipleOutput :: [(IO.FilePath, [String.String])] -> (Chan.Chan ((IO.FilePath, [String.String]), TalkOut) -> IO.IO a) -> IO.IO a Source #

Get output from multiple subprocesses. They'll be killed when the action returns, if they haven't already exited.

binaryNotFound :: IO.IO a -> IO.IO (Maybe a) Source #

ghc 9.2 seems to have added a bug on darwin where binary not found is reported as illegal operation from a binary, and errno=0 from ghci.

util