{-# LANGUAGE NoImplicitPrelude #-}

-- | Functions related to Stack's @docker pull@ and @docker reset@ commands.

module Stack.DockerCmd
  ( dockerPullCmd
  , dockerResetCmd
  ) where

import           Stack.Docker ( preventInContainer, pull, reset )
import           Stack.Prelude
import           Stack.Runners ( ShouldReexec (..), withConfig )
import           Stack.Types.Runner ( Runner )

-- | Function underlying the @stack docker pull@ command. Pull the current

-- Docker image.

dockerPullCmd :: () -> RIO Runner ()
dockerPullCmd :: () -> RIO Runner ()
dockerPullCmd () = forall a. ShouldReexec -> RIO Config a -> RIO Runner a
withConfig ShouldReexec
NoReexec forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *). MonadIO m => m () -> m ()
preventInContainer forall env. HasConfig env => RIO env ()
pull

-- | Function underlying the @stack docker reset@ command. Reset the Docker

-- sandbox.

dockerResetCmd ::
     Bool
     -- ^ Delete the sandbox's home directory?

  -> RIO Runner ()
dockerResetCmd :: Bool -> RIO Runner ()
dockerResetCmd = forall a. ShouldReexec -> RIO Config a -> RIO Runner a
withConfig ShouldReexec
NoReexec forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *). MonadIO m => m () -> m ()
preventInContainer forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall env. HasConfig env => Bool -> RIO env ()
reset