on master help sign in
Add getResource, customizable sink for logger
commit63a637f27cc51006c6b432337c232c17bfe0b0c2 authorJasper Van der Jeugt <jaspervdj@gmail.com> dateWed 25 May 2011, 11:23 (15 years ago) parent01d9898
3 files changed+15−8
src/Hakyll/Core/Compiler.hs+6 src/Hakyll/Core/Logger.hs+8−7 src/Hakyll/Core/Run.hs+1−1
src/Hakyll/Core/Compiler.hs+6
@@ -93,6 +93,7 @@ module Hakyll.Core.Compiler
9393 ( Compiler
9494 , runCompiler
9595 , getIdentifier
96+ , getResource
9697 , getRoute
9798 , getRouteFor
9899 , getResourceString
@@ -173,6 +174,11 @@ runCompiler compiler id' provider universe routes store modified logger = do
173174getIdentifier :: Compiler a Identifier
174175getIdentifier = fromJob $ const $ CompilerM $ compilerIdentifier <$> ask
175176
177+-- | Get the resource that is currently being compiled
178+--
179+getResource :: Compiler a Resource
180+getResource = getIdentifier >>> arr fromIdentifier
181+
176182-- | Get the route we are using for this item
177183--
178184getRoute :: Compiler a (Maybe FilePath)
src/Hakyll/Core/Logger.hs+8−7
@@ -13,7 +13,7 @@ module Hakyll.Core.Logger
1313
1414import Control.Monad (forever)
1515import Control.Monad.Trans (MonadIO, liftIO)
16−import Control.Applicative ((<$>), (<*>))
16+import Control.Applicative (pure, (<$>), (<*>))
1717import Control.Concurrent (forkIO)
1818import Control.Concurrent.Chan.Strict (Chan, newChan, readChan, writeChan)
1919import Control.Concurrent.MVar.Strict (MVar, newEmptyMVar, takeMVar, putMVar)
@@ -24,15 +24,16 @@ import Data.Time (getCurrentTime, diffUTCTime)
2424-- | Logger structure. Very complicated.
2525--
2626data Logger = Logger
27− { loggerChan :: Chan (Maybe String) -- Nothing marks the end
28− , loggerSync :: MVar () -- Used for sync on quit
27+ { loggerChan :: Chan (Maybe String) -- ^ Nothing marks the end
28+ , loggerSync :: MVar () -- ^ Used for sync on quit
29+ , loggerSink :: String -> IO () -- ^ Out sink
2930 }
3031
3132-- | Create a new logger
3233--
33−makeLogger :: IO Logger
34−makeLogger = do
35− logger <- Logger <$> newChan <*> newEmptyMVar
34+makeLogger :: (String -> IO ()) -> IO Logger
35+makeLogger sink = do
36+ logger <- Logger <$> newChan <*> newEmptyMVar <*> pure sink
3637 _ <- forkIO $ loggerThread logger
3738 return logger
3839 where
@@ -42,7 +43,7 @@ makeLogger = do
4243 -- Stop: sync
4344 Nothing -> putMVar (loggerSync logger) ()
4445 -- Print and continue
45− Just m -> putStrLn m
46+ Just m -> loggerSink logger m
4647
4748-- | Flush the logger (blocks until flushed)
4849--
src/Hakyll/Core/Run.hs+1−1
@@ -37,7 +37,7 @@ import Hakyll.Core.Logger
3737--
3838run :: HakyllConfiguration -> Rules -> IO RuleSet
3939run configuration rules = do
40− logger <- makeLogger
40+ logger <- makeLogger putStrLn
4141
4242 section logger "Initialising"
4343 store <- timed logger "Creating store" $