@@ -5,12 +5,15 @@ module Hakyll.Main
55 , hakyllWith
66 ) where
77
8+import Control.Applicative ((<$>))
89import Control.Concurrent (forkIO)
910import Control.Monad (when)
1011import System.Environment (getProgName, getArgs)
1112import System.Directory (doesDirectoryExist, removeDirectoryRecursive)
13+import qualified Data.Set as S
1214
1315import Hakyll.Core.Configuration
16+import Hakyll.Core.Resource
1417import Hakyll.Core.Run
1518import Hakyll.Core.Rules
1619import Hakyll.Core.Rules.Internal
@@ -26,32 +29,32 @@ hakyll = hakyllWith defaultHakyllConfiguration
2629-- configuration
2730--
2831hakyllWith :: HakyllConfiguration -> Rules -> IO ()
29−hakyllWith configuration rules = do
32+hakyllWith conf rules = do
3033 args <- getArgs
3134 case args of
32− ["build"] -> build configuration rules
33− ["clean"] -> clean configuration
35+ ["build"] -> build conf rules
36+ ["clean"] -> clean conf
3437 ["help"] -> help
35− ["preview"] -> preview configuration rules 8000
36− ["preview", p] -> preview configuration rules (read p)
37− ["rebuild"] -> rebuild configuration rules
38− ["server"] -> server configuration 8000
39− ["server", p] -> server configuration (read p)
38+ ["preview"] -> preview conf rules 8000
39+ ["preview", p] -> preview conf rules (read p)
40+ ["rebuild"] -> rebuild conf rules
41+ ["server"] -> server conf 8000
42+ ["server", p] -> server conf (read p)
4043 _ -> help
4144
4245-- | Build the site
4346--
4447build :: HakyllConfiguration -> Rules -> IO ()
45−build configuration rules = do
46− _ <- run configuration rules
48+build conf rules = do
49+ _ <- run conf rules
4750 return ()
4851
4952-- | Remove the output directories
5053--
5154clean :: HakyllConfiguration -> IO ()
52−clean configuration = do
53− remove $ destinationDirectory configuration
54− remove $ storeDirectory configuration
55+clean conf = do
56+ remove $ destinationDirectory conf
57+ remove $ storeDirectory conf
5558 where
5659 remove dir = do
5760 putStrLn $ "Removing " ++ dir ++ "..."
@@ -82,32 +85,27 @@ help = do
8285-- | Preview the site
8386--
8487preview :: HakyllConfiguration -> Rules -> Int -> IO ()
85−preview configuration rules port = do
86− -- Build once, keep the rule set
87− ruleSet <- run configuration rules
88−
89− -- Get the resource list and a callback for the preview poll
90− let resources' = rulesResources ruleSet
91− callback = build configuration rules
92−
88+preview conf rules port = do
9389 -- Fork a thread polling for changes
94− _ <- forkIO $ previewPoll configuration resources' callback
90+ _ <- forkIO $ previewPoll conf update
9591
9692 -- Run the server in the main thread
97− server configuration port
93+ server conf port
94+ where
95+ update = map unResource . S.toList . rulesResources <$> run conf rules
9896
9997-- | Rebuild the site
10098--
10199rebuild :: HakyllConfiguration -> Rules -> IO ()
102−rebuild configuration rules = do
103− clean configuration
104− build configuration rules
100+rebuild conf rules = do
101+ clean conf
102+ build conf rules
105103
106104-- | Start a server
107105--
108106server :: HakyllConfiguration -> Int -> IO ()
109−server configuration port = do
110− let destination = destinationDirectory configuration
107+server conf port = do
108+ let destination = destinationDirectory conf
111109 staticServer destination preServeHook port
112110 where
113111 preServeHook _ = return ()