packages feed

craft-0.0.0.1: src/Craft/Run/Local.hs

module Craft.Run.Local where

import           Control.Lens
import qualified Control.Monad.Trans as Trans
import qualified Data.ByteString     as BS
import qualified Data.Map.Strict     as Map
import           System.Process      hiding (readCreateProcessWithExitCode,
                                      readProcessWithExitCode)

import           Craft.Run.Internal
import           Craft.Types


runLocal :: CraftRunner
runLocal =
  CraftRunner
  { runExec =
      \ce command args ->
      let p = localProc ce command args
      in execProc p
  , runExec_ =
      \ce command args ->
      let p = localProc ce command args
      in execProc_ (showProc p) p
  , runFileRead =
      Trans.lift . BS.readFile . fromAbsFile
  , runFileWrite =
      \fp content ->
        Trans.lift (BS.writeFile (fromAbsFile fp) content)
  , runSourceFile =
      \src dest ->
        let p = (proc "/bin/cp" [src, (fromAbsFile dest)])
                { env           = Nothing
                , cwd           = Nothing
                , close_fds     = True
                , create_group  = True
                , delegate_ctlc = False
                }
        in execProc_ (showProc p) p
  }


localProc :: CraftEnv -> Command -> Args -> CreateProcess
localProc ce prog args =
  (proc prog args)
    { env           = Just . Map.toList $ ce^.craftExecEnv
    , cwd           = Just . fromAbsDir $ ce^.craftExecCWD
    , close_fds     = True
    , create_group  = True
    , delegate_ctlc = False
    }