stack2nix-0.2: src/Stack2nix/External/Util.hs
module Stack2nix.External.Util where
import Data.Monoid ((<>))
import System.Directory (getCurrentDirectory)
import System.Exit (ExitCode (..))
import System.Process (CreateProcess (..), proc,
readCreateProcessWithExitCode)
runCmdFrom :: FilePath -> String -> [String] -> IO (ExitCode, String, String)
runCmdFrom dir prog args = readCreateProcessWithExitCode (fromDir dir (proc prog args)) ""
where
fromDir :: FilePath -> CreateProcess -> CreateProcess
fromDir d procDesc = procDesc { cwd = Just d }
runCmd :: String -> [String] -> IO (ExitCode, String, String)
runCmd prog args = getCurrentDirectory >>= (\d -> runCmdFrom d prog args)
failHard :: (ExitCode, String, String) -> IO (ExitCode, String, String)
failHard r@(ExitSuccess, _, _) = pure r
failHard (ExitFailure code, _, err) =
error $ unlines [ "Failed with exit code " <> show code <> "..."
, show err
]