{-# LANGUAGE OverloadedStrings #-} module HaskellWorks.CabalCache.IO.File ( copyDirectoryRecursive , listMaybeDirectory ) where import Control.Monad.Except import qualified Data.Text as T import qualified HaskellWorks.CabalCache.IO.Console as CIO import qualified System.Directory as IO import qualified System.Exit as IO import qualified System.Process as IO copyDirectoryRecursive :: MonadIO m => FilePath -> FilePath -> ExceptT String m () copyDirectoryRecursive source target = do CIO.putStrLn $ "Copying recursively from " <> T.pack source <> " to " <> T.pack target process <- liftIO $ IO.spawnProcess "cp" ["-r", source, target] exitCode <- liftIO $ IO.waitForProcess process case exitCode of IO.ExitSuccess -> return () IO.ExitFailure n -> throwError $ "cp exited with " <> show n listMaybeDirectory :: MonadIO m => FilePath -> m [FilePath] listMaybeDirectory filepath = do exists <- liftIO $ IO.doesDirectoryExist filepath if exists then liftIO $ IO.listDirectory filepath else return []