module Text.StringTemplates.Utils (directoryEntriesRecursive,directoryFilesRecursive,getRecursiveMTime) where
import System.Directory
import Data.List (isSuffixOf)
import Data.Time.Clock (UTCTime)
directoryEntriesRecursive :: FilePath
-> IO ([FilePath], [FilePath])
directoryEntriesRecursive path | "." `isSuffixOf` path = return ([], [])
| otherwise = do
isDir <- doesDirectoryExist path
if isDir then do
entries <- getDirectoryContents path
let properEntries = map ((path ++ "/")++) entries
results <- mapM directoryEntriesRecursive properEntries
let (dirs, files) = biConcat results
return (path:dirs, files)
else
return ([], [path])
where biConcat = (\(x, y) -> (concat x, concat y)) . unzip
directoryFilesRecursive :: FilePath
-> IO [FilePath]
directoryFilesRecursive path = snd `fmap` directoryEntriesRecursive path
getRecursiveMTime :: FilePath -> IO UTCTime
getRecursiveMTime path = do
(dirs, files) <- directoryEntriesRecursive path
mtimes <- mapM getModificationTime $ dirs ++ files
return $ maximum mtimes