@@ -3,12 +3,13 @@
3module Hakyll.Core.Run where
3module Hakyll.Core.Run where
5import Control.Arrow ((&&&))
5import Control.Arrow ((&&&))
6−import Control.Monad (foldM, forM_)
6+import Control.Monad (foldM, forM_, forM)
7import qualified Data.Map as M
7import qualified Data.Map as M
8import Data.Monoid (mempty)
8import Data.Monoid (mempty)
9import Data.Typeable (Typeable)
9import Data.Typeable (Typeable)
10import Data.Binary (Binary)
10import Data.Binary (Binary)
11import System.FilePath ((</>))
11import System.FilePath ((</>))
12+import Control.Applicative ((<$>))
13import Hakyll.Core.Route
14import Hakyll.Core.Route
14import Hakyll.Core.Identifier
15import Hakyll.Core.Identifier
@@ -60,18 +61,23 @@ hakyllWith rules provider store = do
60 putStrLn "Writing dependency graph to dependencies.dot..."
61 putStrLn "Writing dependency graph to dependencies.dot..."
61 writeDot "dependencies.dot" show graph
62 writeDot "dependencies.dot" show graph
64+ -- Check which items are up-to-date: modified will be a Map Identifier Bool
65+ modifiedMap <- fmap M.fromList $ forM orderedCompilers $ \(id', _) -> do
66+ modified <- if resourceExists provider id'
67+ then resourceModified provider id' store
69+ return (id', modified)
63 -- Generate all the targets in order
71 -- Generate all the targets in order
64− _ <- foldM (addTarget route') M.empty orderedCompilers
72+ _ <- foldM (addTarget route' modifiedMap) M.empty orderedCompilers
66 putStrLn "DONE."
74 putStrLn "DONE."
68− addTarget route' map' (id', comp) = do
76+ addTarget route' modifiedMap map' (id', comp) = do
69 let url = runRoute route' id'
77 let url = runRoute route' id'
71 -- Check if the resource was modified
79 -- Check if the resource was modified
72− modified <- if resourceExists provider id'
80+ let modified = modifiedMap M.! id'
73− then resourceModified provider id' store
76 -- Run the compiler
82 -- Run the compiler
77 compiled <- runCompilerJob comp id' provider (dependencyLookup map')
83 compiled <- runCompilerJob comp id' provider (dependencyLookup map')