{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedRecordDot #-} -- | The module of this name differs as between Windows and non-Windows builds. -- This is the Windows version. module Stack.Docker.Handlers ( handleSetGroups , handleSignals ) where import RIO.Process ( ExitCodeException, proc , runProcess_, setDelegateCtlc ) import Stack.Types.Config ( HasConfig ) import Stack.Types.Docker ( DockerOpts (..)) import Stack.Prelude import System.PosixCompat.Types ( GroupID ) handleSetGroups :: [GroupID] -> IO () handleSetGroups _ = pure () handleSignals :: (Exception e, HasConfig env) => DockerOpts -> Bool -> String -> RIO env (Either e ()) handleSignals docker keepStdinOpen containerID = do let args' = concat [ ["start"] , ["-a" | not docker.detach] , ["-i" | keepStdinOpen] , [containerID] ] finally (try $ proc "docker" args' $ runProcess_ . setDelegateCtlc False) ( unless (docker.persist || docker.detach) $ readProcessNull "docker" ["rm", "-f", containerID] `catch` (\(_ :: ExitCodeException) -> pure ()) )