summaryrefslogtreecommitdiff
path: root/src/Hakyll/Commands.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Hakyll/Commands.hs')
-rw-r--r--src/Hakyll/Commands.hs51
1 files changed, 45 insertions, 6 deletions
diff --git a/src/Hakyll/Commands.hs b/src/Hakyll/Commands.hs
index d86fd5c..7951f4e 100644
--- a/src/Hakyll/Commands.hs
+++ b/src/Hakyll/Commands.hs
@@ -1,4 +1,4 @@
---------------------------------------------------------------------------------
+ --------------------------------------------------------------------------------
-- | Implementation of Hakyll commands: build, preview...
{-# LANGUAGE CPP #-}
module Hakyll.Commands
@@ -9,12 +9,14 @@ module Hakyll.Commands
, rebuild
, server
, deploy
+ , watch
) where
--------------------------------------------------------------------------------
import System.Exit (exitWith, ExitCode)
import Control.Applicative
+import Control.Concurrent
--------------------------------------------------------------------------------
import qualified Hakyll.Check as Check
@@ -26,8 +28,11 @@ import Hakyll.Core.Runtime
import Hakyll.Core.Util.File
--------------------------------------------------------------------------------
+#ifdef WATCH_SERVER
+import Hakyll.Preview.Poll (watchUpdates)
+#endif
+
#ifdef PREVIEW_SERVER
-import Hakyll.Preview.Poll
import Hakyll.Preview.Server
#endif
@@ -60,18 +65,39 @@ clean conf = do
-- | Preview the site
preview :: Configuration -> Verbosity -> Rules a -> Int -> IO ()
#ifdef PREVIEW_SERVER
-preview conf verbosity rules port = do
+preview conf verbosity rules port = do
+ deprecatedMessage
+ watch conf verbosity port True rules
+ where
+ deprecatedMessage = mapM_ putStrLn [ "The preview command has been deprecated."
+ , "Use the watch command for recompilation and serving."
+ ]
+#else
+preview _ _ _ _ = previewServerDisabled
+#endif
+
+
+--------------------------------------------------------------------------------
+-- | Watch and recompile for changes
+
+watch :: Configuration -> Verbosity -> Int -> Bool -> Rules a -> IO ()
+#ifdef WATCH_SERVER
+watch conf verbosity port runServer rules = do
watchUpdates conf update
- server conf port
+ _ <- forkIO (server')
+ loop
where
update = do
(_, ruleSet) <- run conf verbosity rules
return $ rulesPattern ruleSet
+
+ loop = threadDelay 100000 >> loop
+
+ server' = if runServer then server conf port else return ()
#else
-preview _ _ _ _ = previewServerDisabled
+watch _ _ _ _ _ = watchServerDisabled
#endif
-
--------------------------------------------------------------------------------
-- | Rebuild the site
rebuild :: Configuration -> Verbosity -> Rules a -> IO ExitCode
@@ -111,3 +137,16 @@ previewServerDisabled =
, "Alternatively, use an external tool to serve your site directory."
]
#endif
+
+#ifndef WATCH_SERVER
+watchServerDisabled :: IO ()
+watchServerDisabled =
+ mapM_ putStrLn
+ [ "WATCH SERVER"
+ , ""
+ , "The watch server is not enabled in the version of Hakyll. To"
+ , "enable it, set the flag to True and recompile Hakyll."
+ , "Alternatively, use an external tool to serve your site directory."
+ ]
+#endif
+