@@ -5,6 +5,7 @@ module Hakyll.Core.Store
5 , makeStore
5 , makeStore
10import Control.Applicative ((<$>))
11import Control.Applicative ((<$>))
@@ -15,6 +16,7 @@ import Data.Binary (Binary, encodeFile, decodeFile)
16import Hakyll.Core.Identifier
17import Hakyll.Core.Identifier
17import Hakyll.Core.Util.File
18import Hakyll.Core.Util.File
19+import Hakyll.Core.ResourceProvider
19-- | Data structure used for the store
21-- | Data structure used for the store
@@ -51,3 +53,21 @@ storeGet store name identifier = do
51 else return Nothing
53 else return Nothing
53 path = makePath store name identifier
55 path = makePath store name identifier
57+-- | Check if a resource was modified
59+wasModified :: Store -> ResourceProvider -> Identifier -> IO Bool
60+wasModified store provider identifier = do
61+ -- Get the latest seen digest from the store
62+ lastDigest <- storeGet store itemName identifier
63+ -- Calculate the digest for the resource
64+ newDigest <- resourceDigest provider identifier
66+ if Just newDigest == lastDigest
67+ -- All is fine, not modified
69+ -- Resource modified; store new digest
70+ else do storeSet store itemName identifier newDigest
73+ itemName = "Hakyll.Core.Store.wasModified"