module Hi.Template
(
isTemplate
, readTemplates
, untemplate
) where
import Hi.Directory (inTemporaryDirectory)
import qualified Hi.Git as Git
import Hi.Types
import Control.Applicative ((<$>))
import qualified Data.ByteString as BS (readFile)
import Data.List (isSuffixOf)
import Data.List.Split (splitOn)
import System.Directory (canonicalizePath, doesDirectoryExist)
readTemplates :: TemplateSource -> IO Files
readTemplates (FromRepo repo) = do
e <- doesDirectoryExist repo
repo' <- if e
then canonicalizePath repo
else return repo
inTemporaryDirectory "hi" $ do
Git.clone $ Git.expandUrl repo'
paths <- Git.lsFiles
mapM fetchFile paths
fetchFile :: FilePath -> IO File
fetchFile fp | isTemplate fp = TemplateFile fp <$> BS.readFile fp
| otherwise = RegularFile fp <$> BS.readFile fp
isTemplate :: FilePath -> Bool
isTemplate = isSuffixOf ".template"
untemplate :: FilePath -> FilePath
untemplate = head . splitOn ".template"