Listing files into a hsfiles file is now simpler

This commit is contained in:
HugoDaniel 2013-11-07 09:58:34 +00:00
parent 5a53777615
commit ec8edc92f1
3 changed files with 31 additions and 3 deletions

24
yesod-bin/HsFile.hs Normal file
View File

@ -0,0 +1,24 @@
{-# LANGUAGE TupleSections, OverloadedStrings #-}
module HsFile (mkHsFile) where
import Text.ProjectTemplate (createTemplate)
import Data.Conduit
( ($$), (=$), runResourceT, ResourceT, ConduitM, awaitForever, yield )
import Data.Conduit.Filesystem (traverse, sourceFile)
import Prelude hiding (FilePath)
import Filesystem.Path ( FilePath )
import Filesystem.Path.CurrentOS ( encodeString )
import qualified Data.ByteString as BS
import Control.Monad.IO.Class (liftIO)
mkHsFile :: IO ()
mkHsFile = runResourceT $ traverse False "."
$$ readIt
=$ createTemplate
=$ awaitForever (liftIO . BS.putStr)
-- Reads a filepath from upstream and dumps a pair of (filepath, filecontents)
readIt :: ConduitM FilePath (FilePath, ResourceT IO BS.ByteString) (ResourceT IO) ()
readIt = awaitForever $ \i -> do bs <- liftIO $ BS.readFile (encodeString i)
yield (i, return bs)

View File

@ -22,6 +22,7 @@ import Options.Applicative.Types (ReadM (ReadM))
#ifndef WINDOWS
import Build (touch)
import HsFile (mkHsFile)
touch' :: IO ()
touch' = touch
@ -45,7 +46,7 @@ data Options = Options
}
deriving (Show, Eq)
data Command = Init { _initBare :: Bool }
data Command = Init { _initBare, _initHsFiles :: Bool }
| Configure
| Build { buildExtraArgs :: [String] }
| Touch
@ -92,7 +93,7 @@ main = do
] optParser'
let cabal xs = rawSystem' (cabalCommand o) xs
case optCommand o of
Init bare -> scaffold bare
Init bare hsfiles -> if hsfiles then mkHsFile else scaffold bare
Configure -> cabal ["configure"]
Build es -> touch' >> cabal ("build":es)
Touch -> touch'
@ -113,7 +114,8 @@ optParser = Options
<$> flag Cabal CabalDev ( long "dev" <> short 'd' <> help "use cabal-dev" )
<*> switch ( long "verbose" <> short 'v' <> help "More verbose output" )
<*> subparser ( command "init"
(info (Init <$> (switch (long "bare" <> help "Create files in current folder")))
(info (Init <$> (switch (long "bare" <> help "Create files in current folder"))
<*> (switch (long "hsfiles" <> help "Create a hsfiles file for the current folder")))
(progDesc "Scaffold a new site"))
<> command "configure" (info (pure Configure)
(progDesc "Configure a project for building"))

View File

@ -87,6 +87,7 @@ executable yesod
, transformers
, warp >= 1.3.7.5
, wai >= 1.4
, filesystem-conduit >= 1.0 && < 2.0
ghc-options: -Wall -threaded
main-is: main.hs
@ -98,6 +99,7 @@ executable yesod
AddHandler
Paths_yesod_bin
Options
HsFile
source-repository head
type: git