on master help sign in
Check modification only once
e54834fJasper Van der Jeugt
src/Hakyll/Core/Compiler.hs+1−2
@@ -83,10 +83,9 @@ cached :: (Binary a)
83 -> Compiler () a
83 -> Compiler () a
84 -> Compiler () a
84 -> Compiler () a
85cached name (Compiler d j) = Compiler d $ const $ CompilerM $ do
85cached name (Compiler d j) = Compiler d $ const $ CompilerM $ do
86− provider <- compilerResourceProvider <$> ask
87 identifier <- compilerIdentifier <$> ask
86 identifier <- compilerIdentifier <$> ask
88 store <- compilerStore <$> ask
87 store <- compilerStore <$> ask
89− modified <- liftIO $ resourceModified provider identifier store
88+ modified <- compilerResourceModified <$> ask
90 liftIO $ putStrLn $
89 liftIO $ putStrLn $
91 show identifier ++ ": " ++ if modified then "MODIFIED" else "OK"
90 show identifier ++ ": " ++ if modified then "MODIFIED" else "OK"
92 if modified
91 if modified
src/Hakyll/Core/Compiler/Internal.hs+15−6
@@ -37,11 +37,18 @@ type DependencyLookup = Identifier -> CompiledItem
37-- | Environment in which a compiler runs
37-- | Environment in which a compiler runs
38--
38--
39data CompilerEnvironment = CompilerEnvironment
39data CompilerEnvironment = CompilerEnvironment
40+ { -- | Target identifier
40− { compilerIdentifier :: Identifier -- ^ Target identifier
41+ compilerIdentifier :: Identifier
42+ , -- | Resource provider
41− , compilerResourceProvider :: ResourceProvider -- ^ Resource provider
43+ compilerResourceProvider :: ResourceProvider
44+ , -- | Dependency lookup
42− , compilerDependencyLookup :: DependencyLookup -- ^ Dependency lookup
45+ compilerDependencyLookup :: DependencyLookup
46+ , -- | Site route
43− , compilerRoute :: Maybe FilePath -- ^ Site route
47+ compilerRoute :: Maybe FilePath
48+ , -- | Compiler store
44− , compilerStore :: Store -- ^ Compiler store
49+ compilerStore :: Store
50+ , -- | Flag indicating if the underlying resource was modified
51+ compilerResourceModified :: Bool
45 }
52 }
46
53
47-- | The compiler monad
54-- | The compiler monad
@@ -76,8 +83,9 @@ runCompilerJob :: Compiler () a -- ^ Compiler to run
76 -> DependencyLookup -- ^ Dependency lookup table
83 -> DependencyLookup -- ^ Dependency lookup table
77 -> Maybe FilePath -- ^ Route
84 -> Maybe FilePath -- ^ Route
78 -> Store -- ^ Store
85 -> Store -- ^ Store
86+ -> Bool -- ^ Was the resource modified?
79 -> IO a
87 -> IO a
80−runCompilerJob compiler identifier provider lookup' route store =
88+runCompilerJob compiler identifier provider lookup' route store modified =
81 runReaderT (unCompilerM $ compilerJob compiler ()) env
89 runReaderT (unCompilerM $ compilerJob compiler ()) env
82 where
90 where
83 env = CompilerEnvironment
91 env = CompilerEnvironment
@@ -86,6 +94,7 @@ runCompilerJob compiler identifier provider lookup' route store =
86 , compilerDependencyLookup = lookup'
94 , compilerDependencyLookup = lookup'
87 , compilerRoute = route
95 , compilerRoute = route
88 , compilerStore = store
96 , compilerStore = store
97+ , compilerResourceModified = modified
89 }
98 }
90
99
91runCompilerDependencies :: Compiler () a
100runCompilerDependencies :: Compiler () a
src/Hakyll/Core/Run.hs+9−1
@@ -67,8 +67,15 @@ hakyllWith rules provider store = do
67 where
67 where
68 addTarget route' map' (id', comp) = do
68 addTarget route' map' (id', comp) = do
69 let url = runRoute route' id'
69 let url = runRoute route' id'
70+
71+ -- Check if the resource was modified
72+ modified <- if resourceExists provider id'
73+ then resourceModified provider id' store
74+ else return False
75+
76+ -- Run the compiler
70 compiled <- runCompilerJob comp id' provider (dependencyLookup map')
77 compiled <- runCompilerJob comp id' provider (dependencyLookup map')
71− url store
78+ url store modified
72 putStrLn $ "Generated target: " ++ show id'
79 putStrLn $ "Generated target: " ++ show id'
73
80
74 case url of
81 case url of
@@ -79,6 +86,7 @@ hakyllWith rules provider store = do
79 makeDirectories path
86 makeDirectories path
80 write path compiled
87 write path compiled
81
88
89+ putStrLn ""
82 return $ M.insert id' compiled map'
90 return $ M.insert id' compiled map'
83
91
84 dependencyLookup map' id' = case M.lookup id' map' of
92 dependencyLookup map' id' = case M.lookup id' map' of