add debug logging wrapper for withCreateProcess

This commit is contained in:
Joey Hess 2020-06-11 16:43:24 -04:00
parent b60b8ecc78
commit c8ff3e082e
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38

View file

@ -22,6 +22,7 @@ module Utility.Process (
checkSuccessProcess, checkSuccessProcess,
withNullHandle, withNullHandle,
createProcess, createProcess,
withCreateProcess,
waitForProcess, waitForProcess,
cleanupProcess, cleanupProcess,
startInteractiveProcess, startInteractiveProcess,
@ -33,8 +34,8 @@ module Utility.Process (
) where ) where
import qualified Utility.Process.Shim import qualified Utility.Process.Shim
import qualified Utility.Process.Shim as X hiding (CreateProcess(..), createProcess, runInteractiveProcess, readProcess, readProcessWithExitCode, system, rawSystem, runInteractiveCommand, runProcess, cleanupProcess) import qualified Utility.Process.Shim as X hiding (CreateProcess(..), createProcess, withCreateProcess, runInteractiveProcess, readProcess, readProcessWithExitCode, system, rawSystem, runInteractiveCommand, runProcess, cleanupProcess)
import Utility.Process.Shim hiding (createProcess, readProcess, waitForProcess, cleanupProcess) import Utility.Process.Shim hiding (createProcess, withCreateProcess, readProcess, waitForProcess, cleanupProcess)
import Utility.Misc import Utility.Misc
import Utility.Exception import Utility.Exception
import Utility.Monad import Utility.Monad
@ -177,6 +178,11 @@ createProcess p = do
debugProcess p debugProcess p
Utility.Process.Shim.createProcess p Utility.Process.Shim.createProcess p
-- | Wrapper around 'System.Process.withCreateProcess' that does debug logging.
withCreateProcess :: CreateProcess -> (Maybe Handle -> Maybe Handle -> Maybe Handle -> ProcessHandle -> IO a) -> IO a
withCreateProcess p action = bracket (createProcess p) cleanupProcess
(\(m_in, m_out, m_err, ph) -> action m_in m_out m_err ph)
-- | Debugging trace for a CreateProcess. -- | Debugging trace for a CreateProcess.
debugProcess :: CreateProcess -> IO () debugProcess :: CreateProcess -> IO ()
debugProcess p = debugM "Utility.Process" $ unwords debugProcess p = debugM "Utility.Process" $ unwords