hscaffold-0.4.0.0: src/Hscaffold/Generator/Directory.hs
module Hscaffold.Generator.Directory
where
import Data.List
import qualified Data.Text.IO as Text
import System.Directory
import System.FilePath
import Hscaffold.Types
-- | Converts a directory to scaffold actions
hscaffoldFromDirectory :: FilePath -> IO (ScaffoldAction e)
hscaffoldFromDirectory =
hscaffoldFromDirectoryWith (filter (not . ("." `isPrefixOf`)))
-- | Converts a directory to scaffold actions with a custom filter function. By
-- default we ignore directories starting with @.@
hscaffoldFromDirectoryWith
:: ([FilePath] -> [FilePath]) -> FilePath -> IO (ScaffoldAction e)
hscaffoldFromDirectoryWith = hscaffoldFromDirectoryWith' False
hscaffoldFromDirectoryWith'
:: Traversable t =>
Bool
-> ([FilePath] -> t FilePath)
-> FilePath
-> IO [ScaffoldActionType e]
hscaffoldFromDirectoryWith' isRecur p root = do
ls <- p <$> getDirectoryContents root
concat <$> mapM classify ls
where
fromFile fp' fp = do
txt <- Text.readFile fp'
return [ File (normalise fp) txt ]
fromDir =
hscaffoldFromDirectoryWith' True p
classify fp = do
let fp' = root </> fp
isfl <- doesFileExist fp'
isdir <- doesDirectoryExist fp'
if isfl
then fromFile fp' (if isRecur then fp' else fp)
else if isdir
then fromDir fp'
else return []