on master help sign in
Store result automatically using runCompiler
e395b0aJasper Van der Jeugt
src/Hakyll/Core/Compiler.hs+19−8
@@ -3,10 +3,10 @@
3{-# LANGUAGE GeneralizedNewtypeDeriving #-}
3{-# LANGUAGE GeneralizedNewtypeDeriving #-}
4module Hakyll.Core.Compiler
4module Hakyll.Core.Compiler
5 ( Compiler
5 ( Compiler
6+ , runCompiler
6 , getIdentifier
7 , getIdentifier
7 , getRoute
8 , getRoute
8 , getResourceString
9 , getResourceString
9− , storeResult
10 , require
10 , require
11 , requireAll
11 , requireAll
12 , cached
12 , cached
@@ -31,6 +31,23 @@ import Hakyll.Core.ResourceProvider
31import Hakyll.Core.Compiler.Internal
31import Hakyll.Core.Compiler.Internal
32import Hakyll.Core.Store
32import Hakyll.Core.Store
33
33
34+-- | Run a compiler, yielding the resulting target and it's dependencies. This
35+-- version of 'runCompilerJob' also stores the result
36+--
37+runCompiler :: Compiler () CompiledItem -- ^ Compiler to run
38+ -> Identifier -- ^ Target identifier
39+ -> ResourceProvider -- ^ Resource provider
40+ -> DependencyLookup -- ^ Dependency lookup table
41+ -> Maybe FilePath -- ^ Route
42+ -> Store -- ^ Store
43+ -> Bool -- ^ Was the resource modified?
44+ -> IO CompiledItem -- ^ Resulting item
45+runCompiler compiler identifier provider lookup' route store modified = do
46+ CompiledItem result <- runCompilerJob
47+ compiler identifier provider lookup' route store modified
48+ storeSet store "Hakyll.Core.Compiler.runCompiler" identifier result
49+ return $ CompiledItem result
50+
34-- | Get the identifier of the item that is currently being compiled
51-- | Get the identifier of the item that is currently being compiled
35--
52--
36getIdentifier :: Compiler a Identifier
53getIdentifier :: Compiler a Identifier
@@ -50,12 +67,6 @@ getResourceString = getIdentifier >>> getResourceString'
50 provider <- compilerResourceProvider <$> ask
67 provider <- compilerResourceProvider <$> ask
51 liftIO $ resourceString provider id'
68 liftIO $ resourceString provider id'
52
69
53−-- | Store a finished item in the cache
54−--
55−storeResult :: Store -> Identifier -> CompiledItem -> IO ()
56−storeResult store identifier (CompiledItem x) =
57− storeSet store "Hakyll.Core.Compiler.storeResult" identifier x
58−
59-- | Auxiliary: get a dependency
70-- | Auxiliary: get a dependency
60--
71--
61getDependencyOrResult :: (Binary a, Writable a, Typeable a)
72getDependencyOrResult :: (Binary a, Writable a, Typeable a)
@@ -68,7 +79,7 @@ getDependencyOrResult identifier = CompilerM $ do
68 Just r -> return $ unCompiledItem r
79 Just r -> return $ unCompiledItem r
69 -- Not found here, try the main cache
80 -- Not found here, try the main cache
70 Nothing -> fmap (fromMaybe error') $ liftIO $
81 Nothing -> fmap (fromMaybe error') $ liftIO $
71− storeGet store "Hakyll.Core.Compiler.storeResult" identifier
82+ storeGet store "Hakyll.Core.Compiler.runCompiler" identifier
72 where
83 where
73 error' = error "Hakyll.Core.Compiler.getDependency: Not found"
84 error' = error "Hakyll.Core.Compiler.getDependency: Not found"
74
85
src/Hakyll/Core/Compiler/Internal.hs+1
@@ -3,6 +3,7 @@
3{-# LANGUAGE GeneralizedNewtypeDeriving #-}
3{-# LANGUAGE GeneralizedNewtypeDeriving #-}
4module Hakyll.Core.Compiler.Internal
4module Hakyll.Core.Compiler.Internal
5 ( Dependencies
5 ( Dependencies
6+ , DependencyLookup
6 , CompilerEnvironment (..)
7 , CompilerEnvironment (..)
7 , CompilerM (..)
8 , CompilerM (..)
8 , Compiler (..)
9 , Compiler (..)
src/Hakyll/Core/Run.hs+2−5
@@ -91,8 +91,8 @@ hakyllWith rules provider store = do
91 let isModified = id' `S.member` modified'
91 let isModified = id' `S.member` modified'
92
92
93 -- Run the compiler
93 -- Run the compiler
94− compiled <- runCompilerJob comp id' provider (dependencyLookup map')
94+ compiled <- runCompiler comp id' provider (dependencyLookup map')
95− url store isModified
95+ url store isModified
96 putStrLn $ "Generated target: " ++ show id'
96 putStrLn $ "Generated target: " ++ show id'
97
97
98 case url of
98 case url of
@@ -103,9 +103,6 @@ hakyllWith rules provider store = do
103 makeDirectories path
103 makeDirectories path
104 write path compiled
104 write path compiled
105
105
106− -- Store it in the cache
107− storeResult store id' compiled
108−
109 putStrLn ""
106 putStrLn ""
110 return $ M.insert id' compiled map'
107 return $ M.insert id' compiled map'
111
108